java 正则化匹配问题

简单才是美 2013-01-05 02:34:40
<div >
<a herf="xxx">
</div>

<div>
<input xxxx>
</div>

<div>
<input xxxx>
</div>

我有这类似于这个的html文本,<div></div>中间有多行的,但肯定只有一个<a herf>或<input xxx>; 我想找到中间有<a herf="xxx">的<div>块;
我使用的表达式为
"<div>([\\s\\S]*?)(<a herf=){1}([\\s\\S]*?)</div>"
但得到的结果:
<div >
<a herf="xxx">
</div>

<div>
<input xxxx>
</div>

<div>
<input xxxx>
</div>

而我想的结果是:
<div >
<a herf="xxx">
</div>

请问我写的那个正则表达式有什么问题啊?????
...全文
165 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
suciver 2013-01-05
  • 打赏
  • 举报
回复
你的正则真没问题,不知道你自己是怎么找的。可以模拟下就知道了

String s="<div>\n<a herf=\"xxx\">\n</div>\n<div>\n<input xxxx>\n</div>\n<div>\n<input xxxx>\n</div>";
Matcher m=Pattern.compile("<div>([\\s\\S]*?)(<a herf=){1}([\\s\\S]*?)</div>").matcher(s);
while(m.find())
     System.out.println(m.group());
简单才是美 2013-01-05
  • 打赏
  • 举报
回复
再吐槽一下,这个号称全球最大的中文IT社区快成广告社区了,看到就不爽;这个号称也很恶心。
简单才是美 2013-01-05
  • 打赏
  • 举报
回复
引用 1 楼 suciver 的回复:
正则没问题,不知道楼主是怎么找的啊。
就是有问题啊,能把整个内容全部找出来,原因是写了两个([\\s\\S]*?) 这个问题自己已经解决了; "<div>(?![\\s\\S]*(herf))[\\s\\S]*</div>"; 匹配<div>xxxxx</div>但不包含herf的字串,这里有一点不明白 ?!放在前面是为什么,尤其是?,!表示不包含,但?尽可以匹配少的次数应该是放在后面就觉得合理了,不过看参考,应该是个固定组合 http://msdn.microsoft.com/zh-cn/library/az24scfc.aspx
suciver 2013-01-05
  • 打赏
  • 举报
回复
正则没问题,不知道楼主是怎么找的啊。

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧