duracell讲得很不错,不过我认为可能还有两个原因。第一个是MULTILINE,你在compile Pattern的时候加一个Pattern.MULTILINE的开关。它会把字符串里的'\n'当成一个字符来解释。第二个可能的原因是中文。你最好把这段文字解码成unicode的,然后再做匹配。我感觉你这两个标记的regex写得太复杂了。是不是还有其他的可能性,比如标记会分成两行什么的。如果是这样,那真是太痛苦了。我这里也有一段程序,你试试。public List<String> takeText(String input, String beginTag, String endTag) {
    String[] strArray = Pattern.compile(beginTag,P attern.MULTILINE).split(input);
    List<String> result = new ArrayList<String>();
    for (String s : strArray)
        result.add(Pattern.compile(endTag, Pattern.MULTILINE).split(s)[0]);
    return result;
}

解决方案 »

  1.   

    用split也很简单
    只要
    str = '......................'
    pattern ="(<!--\\s*BEGIN\\s*"+strk+"\\s*-->|<!--\\s*END\\s*"+strk+"\\s*-->)"
    return str.split(pattern)[1];
    就可以了btw: to  shhgs() 
    看来你根本就没搞清楚什么是multiline
    multiline的主要作用是对^和$
    打开multiline时,^/$只针对string中的一行的头尾
    关闭multiline时,^/$针对的是string的头尾无论有几行把\n作为字符处理的是dotall另外\s代表了\t\n\x0B\f\r并不是只有空格
    所以pattern换行是没有关系的
      

  2.   

    回复人: eww(飞絮如花) ( ) 信誉:98  2004-03-14 14:00:00  得分:0 
     
     
      有没有更好的法子?:(把我说的方法写一个函数
    本来就可以反复调用
    根本不存在什么麻烦
    要是我自己,两天已经看完两本书了,早就解决了
    网上regex的电子书多了去了
    master regular expression in perl就是经典中的经典(不需要会perl)你觉得php好就去用php好了
    反正java调php也是小菜一碟
    java差也没有人求你用java
    搞了半天连dotall也不懂
    你根本就是连j2se 里面的 java.util.regex 的 document都没看过
    你也配到这里来叫嚣 “也太差了吧:(”
      

  3.   

    To Duracell,是搞错了。这部分看过,但从没用过。所以理解错了也不知道。不过后面的话,可能你有一些误解。我的意思是,<!-- BEGIN news--> 的regex有必要写得这么复杂吗?如果不是要匹配<!-- BEgIN
     news-->
    或者 <!--   bEgIn
    NeWS -->的话,根本没必要写得这么复杂。不过我倒是真的看到过这种变态的网页,真不知道该怎样写regex。
      

  4.   

    回复人: duracell() ( ) 信誉:100  
    你光知道说?最早上面的方法我想就想到了,就是想知道一种比教快速最重要的是不费CPU的算法~~你以为你是高手? HOHO~~~~~~~,我没看过?上面的表达式是怎么来的?你以为就你是高手所?? *眼看人低。不想跟你废话!!~~~。
      

  5.   

    要匹配 <!-- BEgIN
     news-->
    或者 <!--   bEgIn
    NeWS -->
    只需要大小写不敏感就可以了。Pattern.CASE_INSENSITIVE
      

  6.   

    eww(飞絮如花) ( ) 信誉:98  2004-03-14 21:30:00  得分:0 
     
     
      回复人: duracell() ( ) 信誉:100  
    你光知道说?最早上面的方法我想就想到了,就是想知道一种比教快速最重要的是不费CPU的算法~~你以为你是高手? HOHO~~~~~~~,我没看过?上面的表达式是怎么来的?你以为就你是高手所?? *眼看人低。不想跟你废话!!~~~。
      
     
    你连为什么regex会stack溢出都不知道,dotall都不知道,你也算懂正则表达式?
    要高效,你可以自己写匹配的classbtw:我从来没认为自己是高手,不过比你这不学无术的高有限的一点而已,一个简单的问题问了三天你自己还解决不了,你也配称程序员?
      

  7.   

    你连为什么regex会stack溢出都不知道,dotall都不知道,你也算懂正则表达式?
    要高效,你可以自己写匹配的classbtw:我从来没认为自己是高手,不过比你这不学无术的高有限的一点而已,一个简单的问题问了三天你自己还解决不了,你也配称程序员?滚你妈的~~~~~~,谁说我解决不了,不用你的回答,我也不用问直接用substring就能分出来,只是我想找到我认为比较好的方法,你这种人就是自以为懂了,别人都没你行,你知道的就是最好的。还有你以为你就是程序员,你技术比我行有个B用啊? 学技术来干什么?是用来找钱的,我跟你比个鸟~,你就没有问过别人问题,你在这里回了贴子,我现在说,不稀罕你边凉快去,我不须要你的回答。我最JB讨厌你这种自以为了不起自命不凡的人.这里比你历害的高手有的是,有哪个像你那样的? 你说我问了三天了,你不想回答就算了,不要废话。没有人拉着叫你回答~。
      

  8.   

    我没有试过:java.util.regex.Pattern aa=Pattern.compile("(\\s*<!--\\s*b\\s*e\\s*g\\s*i\\s*n\\s*"+strk+"\\s*-->.*?<!--\\s*e\\s*n\\s*d\\s*-->\\s*)",
          Pattern.DOTALL | Pattern.MULTILINE |
          Pattern.CASE_INSENSITIVE);我也刚看正则表达式才几天,顺便也问个问题,怎么替换 "abbc"为"kbbm",即保留"bb"不变。"abbc".replaceAll("^[a]\\w+c","这里怎么写???")
    如果有肯帮忙的朋友,在此先表示谢谢。
      

  9.   

    在技术讨论区也能吵起来,晕!能解决问题就行了,不要追求最好的方法,因为你所认为的最好不一定是真的最好。
    使用RegExp肯定会有StackOverflowError的隐患,所以最简单的方法是找到startIndex和endIndex,然后substring。没什么最好的方法,解决了问题就OK了。
      

  10.   

    给你看一篇牛人写的牛文吧:http://www.chinajavaworld.net/forum/topic.cgi?forum=21&topic=14533
      

  11.   

    to pigo:你是想将 a*c 转化成 k*m吗? 可以使用把 a(\w)c 转成 k$1m
    前面用括号括起来,后面就可以利用 $n来引用。具体可参照相关文档。
      

  12.   

    eww(飞絮如花) ( ) 信誉:98 
    滚你妈的~~~~~~,谁说我解决不了,不用你的回答,我也不用问直接用substring就能分出来,只是我想找到我认为比较好的方法,你这种人就是自以为懂了,别人都没你行,你知道的就是最好的。还有你以为你就是程序员,你技术比我行有个B用啊? 学技术来干什么?是用来找钱的,我跟你比个鸟~,你就没有问过别人问题,你在这里回了贴子,我现在说,不稀罕你边凉快去,我不须要你的回答。我最JB讨厌你这种自以为了不起自命不凡的人.这里比你历害的高手有的是,有哪个像你那样的? 你说我问了三天了,你不想回答就算了,不要废话。没有人拉着叫你回答~。看看,原形毕露了!^_^建议你老兄以后改个nickname 叫碰粪如花
    Computer Science 是一门科学 就给你这种人渣给糟蹋了
      

  13.   

    to robertbiggio(负的四度) ( ) 信誉:100  2004-03-15 10:42:00  得分:0 
     
     
      给你看一篇牛人写的牛文吧:http://www.chinajavaworld.net/forum/topic.cgi?forum=21&topic=14533
      
    基本上就是翻译java api doc里面的java.util.regex的内容的
    属于基本常识
    推荐去看  Mastering Regular Expressions, Second Edition by Jeffrey E. F. Friedl 
    这才是经典著作另外问一句
    java.regex里面有没类似于python的(?P<name>.*) 然后可以用group("name")来找特定group的法子啊?俺试了好像不行,这在有无数个括号的表达式中很有用的,
      

  14.   


    谢谢 jkit(不再灌水)!!!刚才刚在一个javascript的正则表达式里发现这种写法,:)已经测试成功.
      

  15.   


    看看,原形毕露了!^_^  
     
    建议你老兄以后改个nickname  叫碰粪如花  
    Computer  Science  是一门科学  就给你这种人渣给糟蹋了  
    事端由你挑起的,你说我是人渣?如果我是,那你更不如,什么"看看,原形毕露了"??,对付你这号人就是要这样,你人话都不会说,还有资格评价别人???群众的眼睛是雪亮的,我就看不惯你这种人中之拉级,比别多会点就了不起,就随便平击别人,还说别人是人渣。是啊,我是人渣中的人渣。哈哈~~~~~~~~~~~~~~~~~~~~~~~那你更不如!~!!!.
      

  16.   


    看看,原形毕露了!^_^  
     
    建议你老兄以后改个nickname  叫碰粪如花  
    Computer  Science  是一门科学  就给你这种人渣给糟蹋了  
    事端由你挑起的,你说我是人渣?如果我是,那你更不如,什么"原形毕露了"??,对付你这号人就是要这样,也不知道是谁现在"原形毕露了",你人话都不会说,还有资格评价别人???群众的眼睛是雪亮的,我就看不惯你这种人中之拉级,比别多会点就了不起,就随便平击别人,还说别人是人渣。是啊,我是人渣中的人渣。哈哈~~~~~~~~~~~~~~~~~~~~~~~那你更不如!~!!!.