您的位置:程序门 -> java -> j2se / 基础类



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


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


正则表达式多行匹配的问题...
发表于:2007-03-20 16: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-->

请问大家有什么方法可以解决,或者直接贴出正确的正则表达式,感谢万分...
发表于:2007-03-20 16:15:141楼 得分:0
" <!--onething_begin--> [^[onething_end]]* <!--onething_end--> "
发表于:2007-03-20 16:15:402楼 得分:0
坐沙发学习
发表于:2007-03-20 16:18:413楼 得分:0
使用非贪婪,也就是懒惰表达式即可
<!--onething_begin--> .*? <!--onething_end-->
发表于:2007-03-20 16:22:364楼 得分:0
顶,学习了
发表于:2007-03-20 16:28:365楼 得分:0
学习
发表于:2007-03-20 16:35:526楼 得分:0
使用非贪婪,也就是懒惰表达式即可
<!--onething_begin--> .*? <!--onething_end-->
---------------------------
发表于:2007-03-20 16:38:407楼 得分:0
正则表达式默认的是匹配最大的字符串,加上?后就是取得最小的匹配,所谓的惰性匹配。
发表于:2007-03-20 18:59:398楼 得分:0
/*假定你原来的文本保存在字符串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()   );
}



发表于:2007-03-21 13:13:179楼 得分:0
使用非贪婪,也就是懒惰表达式即可
<!--onething_begin--> .*? <!--onething_end-->


快速检索

最新资讯
热门点击