public static void main(String[] args) {
Pattern p = Pattern.compile("asss(?=2211)");
        Matcher m = p.matcher("asss2211");
        System.out.println(m.matches());
}
为什么 我用正向匹配 返回的是false 匹配不上

解决方案 »

  1.   

    Pattern p = Pattern.compile("asss(?=2211)\\d*"); 或
    Pattern p = Pattern.compile("asss(?=2211).*?");
    (?=2211)是向前零宽度正匹配,也就是匹配\\d*或.*?的时候,会向前扫描直到遇到2211为止,如果没有则匹配失败,

    Pattern p = Pattern.compile("asss(?=2211)");
    后面没有\\d*或.*?的匹配,又怎么能继续向前扫描2211呢,也就是开始匹配asss以后,后面就不知道再去匹配什么了,好歹也出现个.*?之类的才能知道还要继续扫描后面的任意字符啊同理
    Pattern p = Pattern.compile("asss\\d*(?<=2211)"); 或
    Pattern p = Pattern.compile("asss.*?(?<=2211)");
    也能达到匹配成功Pattern p = Pattern.compile("asss(?=2211)\\d*"); 或
    Pattern p = Pattern.compile("asss(?=2211).*?");
    (?=2211)是向前零宽度正匹配,也就是匹配\\d*或.*?的时候,会向前扫描直到遇到2211为止,如果没有则匹配失败,

    Pattern p = Pattern.compile("asss(?=2211)");
    后面没有\\d*或.*?的匹配,又怎么能继续向前扫描2211呢,也就是开始匹配asss以后,后面就不知道再去匹配什么了,好歹也出现个.*?之类的才能知道还要继续扫描后面的任意字符啊同理
    Pattern p = Pattern.compile("asss\\d*(?<=2211)"); 或
    Pattern p = Pattern.compile("asss.*?(?<=2211)");
    也能达到匹配成功Pattern p = Pattern.compile("asss(?=2211)\\d*"); 或
    Pattern p = Pattern.compile("asss(?=2211).*?");
    (?=2211)是向前零宽度正匹配,也就是匹配\\d*或.*?的时候,会向前扫描直到遇到2211为止,如果没有则匹配失败,

    Pattern p = Pattern.compile("asss(?=2211)");
    后面没有\\d*或.*?的匹配,又怎么能继续向前扫描2211呢,也就是开始匹配asss以后,后面就不知道再去匹配什么了,好歹也出现个.*?之类的才能知道还要继续扫描后面的任意字符啊同理
    Pattern p = Pattern.compile("asss\\d*(?<=2211)"); 或
    Pattern p = Pattern.compile("asss.*?(?<=2211)");
    也能达到匹配成功
      

  2.   

    出问题了,我才复制粘贴一次就出现这么多次
    重新贴一次吧Pattern p = Pattern.compile("asss(?=2211)\\d*"); 或
    Pattern p = Pattern.compile("asss(?=2211).*?");
    (?=2211)是向前零宽度正匹配,也就是匹配\\d*或.*?的时候,会向前扫描直到遇到2211为止,如果没有则匹配失败,

    Pattern p = Pattern.compile("asss(?=2211)");
    后面没有\\d*或.*?的匹配,又怎么能继续向前扫描2211呢,也就是开始匹配asss以后,后面就不知道再去匹配什么了,好歹也出现个.*?之类的才能知道还要继续扫描后面的任意字符啊同理
    Pattern p = Pattern.compile("asss\\d*(?<=2211)"); 或
    Pattern p = Pattern.compile("asss.*?(?<=2211)");
    也能达到匹配成功
      

  3.   

    Pattern p = Pattern.compile("asss(?=2211)");
            Matcher m = p.matcher("asss2211");
            System.out.println(m.matches());java API那蛋疼的翻译
    我还是叫它 肯定顺序环视 好了
    肯定顺序环视,匹配的是一个位置(不是一个字符),在该位置的右边,若能成功匹配环视里的子表达式,表示匹配成功"asss(?=2211)"其实匹配的就是asss这部分,后面的2211正则引擎只会去看下能不能匹配,但不会作为匹配结果而LZ用了matches,这个方法在正则匹配整个参数的时候才返回true,显然这里没有匹配整个参数字符串如果改用find方法,该有效果
      

  4.   

            Pattern p = Pattern.compile("asss(?=2211)");
            Matcher m = p.matcher("asss2211");
            while(m.find()){
    System.out.println(m.group());
    }