<a href=http://news.xinmin.cn/shehui/2011/10/20/12434372.html mon="a=5&pn=21" target=_blank>
<a href=/ns?word=%BC%D7%BF%BA+cont:326196677&cl=1&tn=newstitle&rn=30>我要匹配url地址 url地址后面必须包含mon规则要能匹配到第一条,第2条则匹配不到第2个问题比如在百度搜索中国中国2子就成了 %D6%D0%B9%FA我要用JAVA 吧中国 变成%D6%D0%B9%FA
怎么弄呢
<a href=/ns?word=%BC%D7%BF%BA+cont:326196677&cl=1&tn=newstitle&rn=30>我要匹配url地址 url地址后面必须包含mon规则要能匹配到第一条,第2条则匹配不到第2个问题比如在百度搜索中国中国2子就成了 %D6%D0%B9%FA我要用JAVA 吧中国 变成%D6%D0%B9%FA
怎么弄呢
第二个问题, 用URLEncoder.encode 试试?
我的博文:http://yijianfengvip.blog.163.com/blog/static/175273432201174115317795/
看看可以解决不?
import java.net.URLEncoder;
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class A { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Reg();
TestUrl();
} private static void Reg() {
String content = "<a href=http://news.xinmin.cn/shehui/2011/10/20/12434372.html mon=\"a=5&pn=21\" target=_blank><a href=/ns?word=%BC%D7%BF%BA+cont:326196677&cl=1&tn=newstitle&rn=30>";
Matcher matcher = Pattern.compile("href=(.*?)\\b+?mon", Pattern.DOTALL)
.matcher(content);
while (matcher.find()) {
System.out.println(matcher.group(1));
}
} private static void TestUrl() {
String con = "中国";
con = URLEncoder.encode(con);
System.out.println(con);
con=URLDecoder.decode(con);
System.out.println(con);
}
}
则忽略掉所有 a标记里面必须有 mon="a=5&pn=21" target=_blank 才提前URL
正则怎么写呢
public static void main(String[] args){
String str ="<a href=http://news.xinmin.cn/shehui/2011/10/20/12434372.html mon='a=5&pn=21' target=_blank>";
String s = "mon='a=5&pn=21' target=_blank";
Pattern patt = Pattern.compile(".*href=(.*)mon='a=5&pn=21' target=_blank");
Matcher m = patt.matcher(str);
if(m.find()){
System.out.println(m.group(1));
}
int start = str.indexOf("href=");
int end = str.indexOf(s);
System.out.println(str.substring(start, end));
}
public String Find(String html, String regex, int g) {
Pattern p = Pattern.compile(regex, Pattern.DOTALL);
Matcher m = p.matcher(html);
StringBuilder sb = new StringBuilder();
while (m.find()) {
String tmp = g == 0 ? m.group() : m.group(g);
sb.append(tmp.trim()).append("\n");
}
return sb.length() == 0 ? html : sb.toString();
} String weburl = Find(html,"href=(.*?)mon",0);
System.out.println (weburl);提取到的结果href=http://www.haodf.com/zhuanjiaguandian/chenxiaoly_537863636.htm mon
href=http://www.haodf.com/zhuanjiaguandian/ahyutang_539056072.htm mon
href=http://www.cnr.cn/allnews/201110/t20111024_508671392.html mon
href=/ns?word=%BC%D7%BF%BA+cont:544965971&cl=1&tn=newstitle&rn=30><font color=#008000 size=1>2条相同新闻>></a></font><br></span><br>
<span>• <a href=http://www.cnr.cn/allnews/201110/t20111024_508671395.html mon
href=/ns?word=%BC%D7%BF%BA+cont:2563865815&cl=1&tn=newstitle&rn=30><font color=#008000 size=1>3条相同新闻>></a></font><br></span>
<span>• <a href=http://roll.sohu.com/20111024/n323194212.shtml mon
href=http://news.beelink.com.cn/20111024/2833748.shtml mon为什么没有 mon的也提取出来了呢?
试了,不怎么好使
我是做采集,原字符串 不只有一个 a 连接
每个a 连接都不一样
href=http://www.cnr.cn/allnews/201110/t20111024_508671392.html mon
我只提取这种记录用了你的
提取出来的结果href=http://www.cnr.cn/allnews/201110/t20111024_508671392.html mon
href=/ns?word=%BC%D7%BF%BA+cont:544965971&cl=1&tn=newstitle&rn=30><font color=#008000 size=1>2条相同新闻>></a></font><br></span><br>
<span>• <a href=http://www.cnr.cn/allnews/201110/t20111024_508671395.html mon
href=/ns?word=%BC%D7%BF%BA+cont:2563865815&cl=1&tn=newstitle&rn=30><font color=#008000 size=1>3条相同新闻>></a></font><br></span>
<span>• <a href=http://roll.sohu.com/20111024/n323194212.shtml mon
href=http://news.beelink.com.cn/20111024/2833748.shtml mon没有mon 的也提取出来了