正则表达式(二)

在 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()可以得到子串内容.下面以一个在一个简历中匹配邮箱的例子进行说明.

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

匹配邮箱的正则由以下4部分组成:以[email protected]为例
不能以下划线开头 :
[\\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 邮箱:[email protected],姓名:张三 邮箱:[email protected]";
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());
}
/** 输出结果:
邮箱是::[email protected]
邮箱后缀:qq.com
groupconut():1
邮箱是::[email protected]
邮箱后缀:163.cn
groupconut():1
*/

正则表达式(二)_第1张图片
find()、group()图解)

图中 group(1)得到的内容就是正则表达式中()表达式匹配的内容

Matcher其他方法

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

你可能感兴趣的:(正则表达式(二))