正则表达式(二)

在 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 对象匹配的
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容