JAVA中的Pattern

以后填坑用

正则中的零宽断言分为正向零宽先行断言,和负向零宽先行断言,先看一段代码:

        Pattern pattern = Pattern.compile("ab(?=[A-Z])");
        Matcher matcher=pattern.matcher("abZW863");
        if(matcher.find()){
            System.out.println(matcher.group());
        }

结果输出为:

ab

匹配后面跟随任意一个大写字母的字符串”ab”。最终匹配结果是”ab”,因为零宽断言”(?=[A-Z])”并不匹配任何字符,只是用来规定当前位置的后面必须是一个大写字母。

再看一段代码:

        Pattern pattern = Pattern.compile("ab(?![A-Z])");
        Matcher matcher=pattern.matcher("abZW863");
        if(matcher.find()){
            System.out.println(matcher.group());
        }

其结果无输出,原因在原matcher.find()结果为false,其语义是匹配后面不跟随任意一个大写字母的字符串”ab”。正则表达式没能匹配任何字符,因为在字符串中,ab的后面跟随有大写字母。

(?=exp) 零宽度正预测先行断言,它断言自身出现的位置的后面能匹配表达式。

(?<=exp) 零宽度正回顾后发断言,它断言自身出现的位置的前面能匹配表达式。

负向:

(?!exp) 零宽度负预测先行断言,它断言此位置的后面不能匹配表达式。

(?<!exp) 零宽度负回顾后发断言,它断言此位置的前面不能匹配表达式。

正则表达式中的量词

  • 贪心
  • 懒惰
  • 占有

http://blog.sina.com.cn/s/blog_12e4623a90101cqy0.html

http://www.jb51.net/article/95906.htm

猜你喜欢

转载自blog.csdn.net/u010999240/article/details/78822242