如何捕获正则表达式匹配到的值?以及如何限制获取正则表达式匹配到的值?
需求:假如有很多个字符串,一个正则表达式格式可以匹配很多个字符串,那么我们怎么能知道每次匹配的字符串是什么样的呢?这个时候就需要捕获正则表达式匹配的值了。
怎样使用java代码捕获呢?代码如下:
public class GetRegexValue {
public static void main(String[] args) {
// 定义一个字符串
String fileName = "address.conf";
// 定义一个正则表达式,包含一个捕获组
String regex = "^(\\w+)\\.(\\w+)$";
// 编译正则表达式
Pattern pattern = Pattern.compile(regex);
// 创建Matcher对象
Matcher matcher = pattern.matcher(fileName);
// 查找匹配项
if (matcher.find()) {
// 通过group(1)获取第一个捕获组的内容
String matchedGroup1 = matcher.group(1);
String matchedGroup2 = matcher.group(2);
System.out.println("matchedGroup1 = " + matchedGroup1);
System.out.println("matchedGroup2 = " + matchedGroup2);
} else {
System.out.println("No match found");
}
}
}
输出结果如下图:
那如果我们现在觉得这种捕获不安全,想要禁止通过代码捕获正则表达式的值呢?可以通过?:符号来限制这个时候需要怎么改写正则表达式呢?请看下面的代码,如下:
public class RobbinGetRegexValue {
public static void main(String[] args) {
// 定义一个字符串
String fileName = "address.conf";
// 定义一个正则表达式,包含一个捕获组
String regex = "^(?:\\w+)\\.(?:\\w+)$";
// 编译正则表达式
Pattern pattern = Pattern.compile(regex);
// 创建Matcher对象
Matcher matcher = pattern.matcher(fileName);
// 查找匹配项
if (matcher.find()) {
//当我们给正则表达式加上?:禁止捕获的时候,此时因为捕获不到值,如果我们直接调用matcher.group(1)会报错,因此这里必须要判断下
if (matcher.groupCount() >= 1) {
String matchedGroup1 = matcher.group(1);
System.out.println("matchedGroup1 = " + matchedGroup1);
}
if (matcher.groupCount() >= 2) {
String matchedGroup2 = matcher.group(2);
System.out.println("matchedGroup2 = " + matchedGroup2);
}
} else {
System.out.println("No match found");
}
}
}
输出结果如下图: