返回信息流<a href="http://aaa.com">word</a><a href="http://bbb.com">word2</a>
sssdsf<a href="http://ccc.com">word3</a>
怎么来匹配出<a href="http://aaa.com">word</a>类似的字符串出来
用正则式
这是一条镜像帖。来源:北邮人论坛 / soft-design / #2822同步于 2005/12/30
该镜像源已超过 30 天没有更新,可能在源站已被删除。
SoftDesign机器人发帖
一个匹配字符的问题
tztg
2005/12/30镜像同步7 回复
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
String wml = "<a href=\"http://sff.com\" >word</a>aa<a sd href=\"bbb\" aa>word1</a>";
String regex = "<a\\s*href=[\"'](.*)[\"']\\s*>([^<]*)(?!<a)</a>";
Pattern pt = Pattern.compile(regex);
Matcher m = pt.matcher(wml);
while(m.find()){
System.out.println("该次查找获得匹配组的数量为:"+m.groupCount());
for (int i = 0; i <= m.groupCount(); i++) {
System.out.println("第"+i+"组的子串内容为: "+m.group(i));
}
}
关键的是<a>word</a>中的word怎么来匹配的问题
如果是.*的话,就会匹配到<a>word></a><a>word></a>中的word></a><a>word>
用[^]排除的话,不知道怎么写...
[^<]这样会误杀不少
阿天|乾为天(822112) 19:31:04
很简单,我现在要匹配html的链接地址
原字符串:<a>doc</a><a>doc2</a>
要获取的结果是:<a>doc</a>和<a>doc2</a>
如果用正则<a>.*</a>的话,就会出错,因为".*"匹配到的是</a><a>doc2
终于研究出来了。。。
原问题是匹配抽取<a>doc1</a><a>doc2</a>
原来用<a>(.*)</a>已经在上面说过不可用了,
又试验过用?来非贪婪匹配,还有排除等N种方法,都没有成功。
昨天偶然试了个东西。。。ok了。。。还真是无奈。。
用(.+?)来匹配。。而不是(.*?)
源代码如下:
public static void main(String[] args) {
Pattern pt = Pattern.compile("<a>(.+?)</a>");
Matcher m = pt.matcher("<a>aa</a><a>bb</a>");
while(m.find()){
for (int i = 0; i < m.groupCount(); i++) {
System.out.print(m.group(i)+"\t");
}
System.out.println("");
}
}
顺便说下个东西: split 和 StringTokener
后者早就已经可以入坟烧香了。
前者,内部实现就是用Matcher实现的,replaceAll也是。
记得刚学java的时候,split("|")没得到要的结果,其实就是因为split的输入参数是正则式,而"|"是正则式的关键字