System.out.println("love 300".matches("love (?=you|300)"));
System.out.println("love 123".matches("love (?!you|300)"));
为什么输出结果都是false
有高手指点下么。。谢谢!!

解决方案 »

  1.   

    System.out.println("love 300".matches("love (you|300)"));
      

  2.   

    ?=
    ?!
    都是非捕获组,不能和love 300完全匹配。但可以部分匹配。
      

  3.   

    import java.util.regex.*;
    public class Test7 {
    public static void main(String[] args){
    String str="love 300";
    String regex="love (?=you|300)";
    Matcher mat=Pattern.compile(regex).matcher(str);
    while(mat.find()){
    System.out.println(mat.group());
    } }
    }
    你运行一下这个程序,就可以看到匹配的结果了。
    String.matches()方法要的完全匹配。非捕获组在匹配时,只作为匹配依据,不作为匹配的结果。
    比如这个:"love (?=you|300)",匹配时,只匹配"love "并要求"love "之后是"you"或是"300"。
    换句话说,这个正则只匹配后跟"you"或"300"的"love ".
      

  4.   

    你这个当然不能匹配了,因为你用的是环视,环视匹配的是位置而不是字符
    所以 试试 love (?=you|300)300就可以明白我的意思了,如果想打印true.
    love (you|300)应该可以满足你的要求
      

  5.   

    import java.util.regex.*;
    public class Test7 {
    public static void main(String[] args){
    String str="love 300";
    String regex="love (?=you|300)";
    Matcher mat=Pattern.compile(regex).matcher(str);
    while(mat.find()){
    System.out.println(mat.group());
    } }
    }
      

  6.   

    这个正则只匹配后跟"you"或"300"的"love ".
    Stirng.matches要求完全匹配"you 300"
    所以返回是false.
      

  7.   

    有点明白了。。谢谢各位。。
    特别感谢bigbug9002