正则表达式多行匹配的问题...
假设我有文本如下
<!--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-->
请问大家有什么方法可以解决,或者直接贴出正确的正则表达式,感谢万分...
[解决办法]
" <!--ONETHING_BEGIN--> [^[ONETHING_END]]* <!--ONETHING_END--> "
[解决办法]
坐沙发学习
[解决办法]
使用非贪婪,也就是懒惰表达式即可
<!--ONETHING_BEGIN--> .*? <!--ONETHING_END-->
[解决办法]
顶,学习了
[解决办法]
学习
[解决办法]
使用非贪婪,也就是懒惰表达式即可
<!--ONETHING_BEGIN--> .*? <!--ONETHING_END-->
---------------------------
[解决办法]
正则表达式默认的是匹配最大的字符串,加上?后就是取得最小的匹配,所谓的惰性匹配。
[解决办法]
/*假定你原来的文本保存在字符串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() );
}
[解决办法]
使用非贪婪,也就是懒惰表达式即可
<!--ONETHING_BEGIN--> .*? <!--ONETHING_END-->
[解决办法]
考虑中 我这也有个相关的问题还没有解决呢
http://topic.csdn.net/u/20080313/14/a070f343-7fb3-4c19-86ba-36b56c780295.html
顶下
------解决方案--------------------
Java 正则表达式中有三种量词:
1.无后缀的贪婪一口吃掉所有的字符,然后逐个吐出来,看看剩下的是否与模式匹配,不是继续吐,直到没有字符或者是匹配成功为止。
2.后缀问号的勉强,这种是从头一个字符一个字符地吃,进行匹配,匹配成功结束,不成功时直到全部把字符吃完为止。
3.后缀加号的侵占,与贪婪类似,但是它不进行回溯,一般用于加快匹配效率或者是不需要回溯的情况。
[解决办法]
楼上的精炼文字有点不太明白
能不能举个例子
呵呵 不胜感激
[解决办法]