正则表达式困扰

tan8888 2009-04-29 05:20:58


String input ="abac";
String regex = "a(?=b)";//这里换成a(?<=b)为什么不一样,"b"也是在a的后面啊
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(input);
while(m.find()) {
println(m.group()+" start "+m.start()+" end " +m.end());

}

我知道那是lookahead和lookbehind区别,但什么是lookahead和lookbehind不明白,各位高手能否给出详细的例子和引擎扫描过程?
另外,不匹配一个字符串怎么写正则,如下面一段代码,我想把除了<br>和<p>标签以外的标签除掉

String regex = "<((?!(br)|(?!p)).)*>";//这么写不行,应该怎么写
String input = "aaaa<font color=\"red\"><p><br>bbbbb<br></p>";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(input);
while(m.find()){
System.out.println(m.replaceAll(""));
}
...全文
137 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
kimi 2009-04-30
  • 打赏
  • 举报
回复
兄弟

Regex中的Group来控制类似
a(?=b)
a(b) 其实匹配的东西是一样的,但是只是最后显示的结果不同,多了一个结果组Group
tan8888 2009-04-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 bao110908 的回复:]
你的问题让我费解:

我想把除了 <br>和 <p>标签以外的标签除掉
String input = "aaaa <font color=\"red\"> <p> <br>bbbbb <br> </p>";

请问,像 </p>, <br /> 之类的要去掉么?

[/Quote]
谢谢你的回复,像 </p>, <br /> 之类的不要除掉,其他的都要除掉,请问怎么写,
一方面我也想了解一下正则“不匹配”是怎么写的,另一方面,近来也碰到这方面的需求,
就是在html页面里提取正文,但保留一些<p></p>和<br/>的标签。
  • 打赏
  • 举报
回复
你的问题让我费解:

我想把除了 <br>和 <p>标签以外的标签除掉
String input = "aaaa<font color=\"red\"><p><br>bbbbb<br></p>";

请问,像 </p>, <br /> 之类的要去掉么?
  • 打赏
  • 举报
回复
正则表达式中 lookaround(环视)分为两类[lookahead(正序环视)和 lookbehind(逆序环视)]四种:

(?<=) positive lookbehind 肯定型逆序环视
(?<!) negative lookbehind 否定型逆序环视
(?=) positive lookahead 肯定型顺序环视
(?!) negative lookahead 否定型逆序环视

至于用法,可以到这个版块的“推荐[精华]”中找到。

我搜集了一些,有兴趣的话可以去看看:

http://topic.csdn.net/u/20080716/22/80cdd418-a0e9-4e7e-8435-df6d4bc11c4a.html
http://topic.csdn.net/u/20080627/14/8a91b33a-f35c-4303-85b5-e0a8da462202.html
http://topic.csdn.net/u/20080503/01/3c82b040-43b9-4b44-847d-07b366285957.html
http://topic.csdn.net/u/20080325/17/fb7a3e8d-029a-4d8e-89ae-77a9d28ec301.html?seed=1903622943


62,614

社区成员

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

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