日期:2014-05-20  浏览次数:20677 次

正则表达式多行匹配的问题...
假设我有文本如下

<!--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

顶下
------解决方案--------------------