有段程序如下:
public class TestStartEnd {
public static void main(String[] args) {
String s="abcxxxdedfcyyygggggxxxiiiiiyyyzzz";
Matcher m=Pattern.compile("xxx(.*)yyy").matcher(s);
m.find();
System.out.println(m.group());
}
}
输出是xxxdedfcyyygggggxxxiiiiiyyy。我如何编写正则表达式让输出是第一个匹配的字符串。即:
xxxdedfcyyy。

解决方案 »

  1.   

    没找到更好的方法,只能用第一个yyy后的字符来判
    String s="abcxxxdedfcyyygggggxxxiiiiiyyyzzz";
    Matcher m=Pattern.compile("(xxx.+yyy)g").matcher(s);
        m.find();
    System.out.println(m.group(1));
    输出:
    xxxdedfcyyy
      

  2.   

    不用yyy后的字符可不可以呢?只用正则表达式的语法约束。
      

  3.   

    可能与java的解析有不关,记得boost的正则表达式在查找匹配时有一选项可以解决这个问题
    不过boost好像没有for JAVA的,试试其它正则表达式库
      

  4.   

    import java.util.regex.*;
    public class TestStartEnd {
    public static void main(String[] args) {
    String s="abcxxxdedfcyyygggggxxxiiiiiyyyzzz";
    Matcher m=Pattern.compile("xxx(.*?)yyy").matcher(s);
    m.find();
    System.out.println(m.group());
    }
    }
      

  5.   

    Pattern.compile("xxx[^y]*yyy").matcher(s);正则表达式本身你写错了,当然出来的结果不对啦!
      

  6.   

    interhanchi(闭关修练中!) 的方法不错, jFresH_MaN(Contributing to Eclipse) 的我也想过,不过有个小问题,如果是
    abcxxxdeydfcyyygggggxxxiiiiiyyyzzz就不对了
      

  7.   

    能不能给解释一下("xxx(.*?)yyy")和("xxx(.*)yyy")的区别?
    我把程序又改了一下:加了一个x
    public class ReplaceDemo { public static void main(String[] args) {
    String s="abcxxxxdedfcyyygggggxxxiiiiiyyyzzz";
    Pattern p=Pattern.compile("xxx(.*?)yyy");
    Matcher m=p.matcher(s);

    while(m.find()){
    String s1=m.group();
    System.out.println(s1);
    }
    }
    }
    输出是:
    xxxxdedfcyyy
    xxxiiiiiyyy现在我怎么写正则表达式才能让程序输出:
    xxxxdedfcyyy
    xxxdedfcyyy
    xxxiiiiiyyy
      

  8.   

    输出三个匹配,好像有难度
    要正确输出
    xxxdedfcyyy
    xxxiiiiiyyy
    可以用
    Pattern p=Pattern.compile("xxx([^x].*?)yyy");
      

  9.   

    当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串 "oooo",'o+?' 将匹配单个 "o",而 'o+' 将匹配所有 'o'。