假设我有文本如下<!--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-->请问大家有什么方法可以解决,或者直接贴出正确的正则表达式,感谢万分...

解决方案 »

  1.   

    "<!--ONETHING_BEGIN-->[^[ONETHING_END]]*<!--ONETHING_END-->"
      

  2.   

    使用非贪婪,也就是懒惰表达式即可
    <!--ONETHING_BEGIN-->.*?<!--ONETHING_END-->
      

  3.   

    使用非贪婪,也就是懒惰表达式即可
    <!--ONETHING_BEGIN-->.*?<!--ONETHING_END-->
    ---------------------------
      

  4.   

    /*假定你原来的文本保存在字符串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() );
    }

      

  5.   

    使用非贪婪,也就是懒惰表达式即可
    <!--ONETHING_BEGIN-->.*?<!--ONETHING_END-->
      

  6.   

    考虑中 我这也有个相关的问题还没有解决呢
    http://topic.csdn.net/u/20080313/14/a070f343-7fb3-4c19-86ba-36b56c780295.html顶下
      

  7.   

    Java 正则表达式中有三种量词:1.无后缀的贪婪一口吃掉所有的字符,然后逐个吐出来,看看剩下的是否与模式匹配,不是继续吐,直到没有字符或者是匹配成功为止。2.后缀问号的勉强,这种是从头一个字符一个字符地吃,进行匹配,匹配成功结束,不成功时直到全部把字符吃完为止。3.后缀加号的侵占,与贪婪类似,但是它不进行回溯,一般用于加快匹配效率或者是不需要回溯的情况。
      

  8.   


    这个是我发的帖子,里面有一些关于正则表达式的资源链接,有空可以去看看(帖子已经结掉了)http://topic.csdn.net/u/20080306/17/f37a1818-3968-49b4-8f79-e5564486d63e.html