正则表达式多行匹配的问题...

toosean 2007-03-20 04:09:31
假设我有文本如下

<!--ONETHING_BEGIN-->
<!--ONETHING_NAME-->
<!--ONETHING_COLOR-->
<!--ONETHING_WIDTH-->
<!--ONETHING_HEIGHT-->
<!--ONETHING_END-->
<!--ONETHING_BEGIN-->
<!--ONETHING_NAME-->
<!--ONETHING_COLOR-->
<!--ONETHING_WIDTH-->
<!--ONETHING_HEIGHT-->
<!--ONETHING_END-->

使用正则表达式匹配时我希望得到第一个 <!--ONETHING_BEGIN--> 和第一个 <!--ONETHING_END--> 之间内容,即

<!--ONETHING_NAME-->
<!--ONETHING_COLOR-->
<!--ONETHING_WIDTH-->
<!--ONETHING_HEIGHT-->

但是结果往往是会得到第一个 <!--ONETHING_BEGIN--> 和最后一个 <!--ONETHING_END--> 之间内容,即

<!--ONETHING_NAME-->
<!--ONETHING_COLOR-->
<!--ONETHING_WIDTH-->
<!--ONETHING_HEIGHT-->
<!--ONETHING_END-->
<!--ONETHING_BEGIN-->
<!--ONETHING_NAME-->
<!--ONETHING_COLOR-->
<!--ONETHING_WIDTH-->
<!--ONETHING_HEIGHT-->

请问大家有什么方法可以解决,或者直接贴出正确的正则表达式,感谢万分...
...全文
1060 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
cs_dubin 2008-03-14
  • 打赏
  • 举报
回复
考虑中 我这也有个相关的问题还没有解决呢
http://topic.csdn.net/u/20080313/14/a070f343-7fb3-4c19-86ba-36b56c780295.html

顶下
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 cs_dubin 的回复:]
楼上的精炼文字有点不太明白
能不能举个例子
呵呵 不胜感激
[/Quote]

这个是我发的帖子,里面有一些关于正则表达式的资源链接,有空可以去看看(帖子已经结掉了)

http://topic.csdn.net/u/20080306/17/f37a1818-3968-49b4-8f79-e5564486d63e.html
cs_dubin 2008-03-14
  • 打赏
  • 举报
回复
楼上的精炼文字有点不太明白
能不能举个例子
呵呵 不胜感激
  • 打赏
  • 举报
回复
Java 正则表达式中有三种量词:

1.无后缀的贪婪一口吃掉所有的字符,然后逐个吐出来,看看剩下的是否与模式匹配,不是继续吐,直到没有字符或者是匹配成功为止。

2.后缀问号的勉强,这种是从头一个字符一个字符地吃,进行匹配,匹配成功结束,不成功时直到全部把字符吃完为止。

3.后缀加号的侵占,与贪婪类似,但是它不进行回溯,一般用于加快匹配效率或者是不需要回溯的情况。
qzjackie 2007-03-21
  • 打赏
  • 举报
回复
使用非贪婪,也就是懒惰表达式即可
<!--ONETHING_BEGIN-->.*?<!--ONETHING_END-->
Shenmike 2007-03-20
  • 打赏
  • 举报
回复
/*假定你原来的文本保存在字符串str里,以下代码实现截取第一个<!--ONETHING_BEGIN--> 和第一个 <!--ONETHING_END--> 之间内容*/

Pattern p = Pattern.compile(
"(?<=<!--ONETHING_BEGIN-->)(.*?\\n?)*?(?=<!--ONETHING_END-->)" );
Matcher m = p.matcher(sb);

if( m.find() ){
System.out.println( m.group() );
}



shan1119 2007-03-20
  • 打赏
  • 举报
回复
正则表达式默认的是匹配最大的字符串,加上?后就是取得最小的匹配,所谓的惰性匹配。
shan1119 2007-03-20
  • 打赏
  • 举报
回复
使用非贪婪,也就是懒惰表达式即可
<!--ONETHING_BEGIN-->.*?<!--ONETHING_END-->
---------------------------
jianghuxiaoxiami 2007-03-20
  • 打赏
  • 举报
回复
学习
handa5201 2007-03-20
  • 打赏
  • 举报
回复
顶,学习了
lip009 2007-03-20
  • 打赏
  • 举报
回复
使用非贪婪,也就是懒惰表达式即可
<!--ONETHING_BEGIN-->.*?<!--ONETHING_END-->
weiski_83 2007-03-20
  • 打赏
  • 举报
回复
坐沙发学习
imA 2007-03-20
  • 打赏
  • 举报
回复
"<!--ONETHING_BEGIN-->[^[ONETHING_END]]*<!--ONETHING_END-->"

62,614

社区成员

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

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