在 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 对象匹配的 |
网友评论