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

正则表达式(二)

作者: 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 对象匹配的

相关文章

  • iOS 正则表达式细说

    ios正则表达式细说(一)ios正则表达式细说(二)

  • Java正则表达式参考

    Java正则表达式入门 java正则表达式应用 深入浅出之正则表达式(一) 深入浅出之正则表达式(二) 正则表达式...

  • 正则表达式

    Python正则表达式初识(一) Python正则表达式初识(二) Python正则表达式初识(三) Python...

  • 2019-01-11三剑客之grep

    一、正则表达式 基本正则表达式 逐一阐述 扩展正则表达式 案例 二、grep 参数 案例

  • 常用正则表达式

    常用正则表达式大全!(例如:匹配中文、匹配html)目录导航一、常见正则表达式二、正则表达式应用一、常见正则表达式...

  • 正则表达式(二)--常用正则表达式

    正则表达式(二)--常用正则表达式 @(study)[Maxe, markdown_study, LaTex_st...

  • 高效的获取文件的扩展名

    一: 正则表达式 二: 正则表达式 四: String的slice、lastIndexOf方法 这是如何实现的...

  • linux-正则表达式

    一、正则表达式 1.1、字符匹配 1.2、匹配次数 1.3、位置锚定 二、扩展正则表达式

  • 手机号码中间四位数显示****

    方法一:正则表达式 方法二:subtr

  • 常用的正则表达式

    一、主要是验证数字的常见正则表达式: 二、主要校验字符的正则表达式: 三、特殊需求正则表达式: 下面给大家介绍在前...

网友评论

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

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