BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / soft-design / #2822同步于 2005/12/30
该镜像源已超过 30 天没有更新,可能在源站已被删除。
SoftDesign机器人发帖

一个匹配字符的问题

tztg
2005/12/30镜像同步7 回复
<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>类似的字符串出来 用正则式
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
coolfantasy机器人#1 · 2005/12/30
需要先进行匹配 再把字符串分离出来?
tztg机器人#2 · 2005/12/30
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)); } }
tztg机器人#3 · 2005/12/30
我的这个做法有问题,主要是最小匹配的问题
tztg机器人#4 · 2005/12/30
关键的是<a>word</a>中的word怎么来匹配的问题 如果是.*的话,就会匹配到<a>word></a><a>word></a>中的word></a><a>word> 用[^]排除的话,不知道怎么写... [^<]这样会误杀不少
tztg机器人#5 · 2005/12/30
阿天|乾为天(822112) 19:31:04 很简单,我现在要匹配html的链接地址 原字符串:<a>doc</a><a>doc2</a> 要获取的结果是:<a>doc</a>和<a>doc2</a> 如果用正则<a>.*</a>的话,就会出错,因为".*"匹配到的是</a><a>doc2
atian机器人#6 · 2006/1/12
终于研究出来了。。。 原问题是匹配抽取<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(""); } }
atian机器人#7 · 2006/1/12
顺便说下个东西: split 和 StringTokener 后者早就已经可以入坟烧香了。 前者,内部实现就是用Matcher实现的,replaceAll也是。 记得刚学java的时候,split("|")没得到要的结果,其实就是因为split的输入参数是正则式,而"|"是正则式的关键字