美文网首页
正则表达式(二)

正则表达式(二)

作者: Lstone | 来源:发表于2017-07-02 22:26 被阅读35次

    在 Java 中使用 Pattern 和 Matcher来使用正则表达式.通过 Pattern 类提供的静态方法 compile()获取 Pattern 对象.
    Pattern 对象的 matcher()方法获取一个 Matcher 对象,通过这个 Matcher 对象能够得目标字符串中是否包含与 Pattern 匹配的字符串,匹配的内容和位置等...

    public static void legalChar(){
            String regex = "ab" ;
            //编译正则表达式
            Pattern pattern = Pattern.compile(regex);
            //匹配目标字符串
            Matcher matcher = pattern.matcher("aabcab");
            //匹配目标字符串中是否包含与 Pattern 匹配的子串 ,"aabcab"中是否包含 ab 子串,是返回 true
            while(matcher.find()){
                //得到与 pattern 匹配的子串的内容
                System.out.println(matcher.group());
                //得到 pattern 匹配的子串在目标字符串的起始位置
                System.out.println(matcher.start());
                //得到pattern匹配的子串在目标字符串的结束位置
                System.out.println(matcher.end());
            }       
    }
        
    /**
      输出结果:
      ab
      1
      3
      ab
      4
      6
    */
    

    通过 find()方法可以检测目标字符串中是否含有与 Pattern 相匹配的字符串,只有 find()方法返回为 true 的时候,才可以调用 group(),start(),end()等方法.

    find()和 group(int group)详解

    通过 find()方法,可以检测目标字符串是否有与 Pattern 相匹配的子串.通过 group()可以得到子串内容.下面以一个在一个简历中匹配邮箱的例子进行说明.

    邮箱格式一般为 xxx@xxx.xxx ,在一段简历描述的字符串中使用正则表达式得到邮箱,并且得到@后的内容. 对匹配邮箱长度做一定限制.

    匹配邮箱的正则由以下4部分组成:以983580045@qq.com为例
    不能以下划线开头 :
    [\\w[^_ ]]   本例中以9开头
    6~20位的任意字母数字或者下划线 :
    \\w{6,20}  本例中为83580045
    @符号:
    @
    正则表达式的一个子组使用()表达式 .后只能是字母,不能包含数字下划线:
    (\\w{2,3}\\.[\\w[^\\d_]]{2,3}) 本例中为 qq.com
    以上四部分组成了一个完整的正则表达式:[\\w[^_]]\\w{6,20}@(\\w{2,3}\\.[\\w[^\\d_]]{2,3}) 
    

    邮箱匹配

    String targetStr ="姓名:Lstone 邮箱:983580045@qq.com,姓名:张三 邮箱:1032773050@163.cn";
    String regexStr = "[\\w[^_]]\\w{6,20}@(\\w{2,3}\\.[\\w[^\\d_]]{2,3})";
    Pattern pattern = Pattern.compile(regexStr);
    Matcher matcher = pattern.matcher(targetStr);
    while (matcher.find()) {
        System.out.println("邮箱是:"+matcher.group(0));
        System.out.println("邮箱后缀:"+matcher.group(1));
        //正则表达式中 pattern 匹配的子组只有一组,因此 groupCount()返回值为1                       
        System.out.println("groupconut():"+matcher.groupCount());
    }
    /** 输出结果:
    邮箱是::983580045@qq.com
    邮箱后缀:qq.com
    groupconut():1
    邮箱是::1032773050@163.cn
    邮箱后缀:163.cn
    groupconut():1
    */
    
    find()、group()图解)
    图中 group(1)得到的内容就是正则表达式中()表达式匹配的内容

    Matcher其他方法

    方法名 说明
    groupCount(int group) 返回正则表达式中的匹配的子组数,group()组不在该方法计算内.如果一个正则表达式除了 group()组外,没有匹配到其他()子组,则返回值为0
    start() 返回组在目标字符串的起始位置
    end() 返回组在目标字符串的结束位置
    reset() 重置 Matcher 对象,设置新的目标字符串
    lookingAt() 返回目标字符串的前半部分是否于 pattern 对象向匹配
    matchers() 检测整个目标字符串是否于 pattern 对象相匹配,它与 find()方法区别是,find()方法是检测字目标字符串中是否与 pattern 对象匹配的

    相关文章

      网友评论

          本文标题:正则表达式(二)

          本文链接:https://www.haomeiwen.com/subject/rakocxtx.html