您当前的位置: 首页 >  正则表达式

郭梧悠

暂无认证

  • 3浏览

    0关注

    402博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

每天一点正则表达式积累之(?=X)和(?!X)测试(七)

郭梧悠 发布时间:2012-06-13 11:29:18 ,浏览量:3

         /*.{3}(?=a)代表着这样的功能:
         * 查找给出的字符串中符合a前面有三个字母的这样的子串,当然取得的子串不包括(?=a)
         */
        Pattern p = Pattern.compile(".{3}(?=a)");//(?=X) X,通过零宽度的正 lookahead 
        String s1 = "444a66b";
        Matcher m = p.matcher(s1);
        while (m.find()) {
            p(m.group());
        }
        p("***********************************");

        /*同理\\d{3}(?=a)代表着这样的功能:
         * 查找给出的字符串中符合a前面有三个数字的这样的子串,当然取得的子串不包括(?=a)
         * 本例给出的444a66b是匹配的,得出的group是444
         * 而 "44d4a66b";是不匹配的,因为没有在a之前没连续的三个数字
         * 在例如.{3}(?=b)这样的匹配,如果用来匹配444a66b得到的字符串是a66
         */
        p = Pattern.compile("\\d{3}(?=a)");//(?=X) X,通过零宽度的正 lookahead 
        String s2 = "444a66b";
        m = p.matcher(s2);
        while (m.find()) {
            p(m.group());
        }
        p("***********************************");
        /**
         * 通过上面的(?=X)下面来测试和设想一下(?!a),api解释为
         * (?!X) X,通过零宽度的负lookahead,所以对比一下很容易想到
         * \\d{3}(?!a)代表着连续三个数字的后面出现的字符不是a的匹配,
         * 所以字符串444a666b只有一个匹配子串666
         * 字符串444b666b两个匹配444 666
         * 字符串444a666a都不匹配
         */
        p = Pattern.compile("\\d{3}(?!a)");//(?!X) X,通过零宽度的负lookahead 
        String s3 = "444b666b";
        m = p.matcher(s3);
        while (m.find()) {
            p(m.group());
        }
关注
打赏
1663674776
查看更多评论
立即登录/注册

微信扫码登录

0.0375s