正则表达式多行匹配的问题...
假设我有文本如下
<!--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
顶下
------解决方案--------------------