Java正则表达式-组
1 什么是组
我们可以用括号将多个字符分组为一个单位。例如,(ab)。
正则表达式中的每个组都有一个组号,该组号从1开始。
groupCount()来自Matcher类的方法,返回与Matcher实例关联的模式中的组数。
组0引用了整个正则表达式,而groupCount() 方法未报告该组。
正则表达式中的每个左括号都标志着一个新组的开始。
我们可以在正则表达式中引用组号。
假设我们要匹配以"abc"开头,后跟"xyz"和"abc"开头的文本。
我们可以将正则表达式写为"abcxyzabc"。
我们可以使用反向引用将正则表达式重写为"(abc)xyz\1"。 \1指的是第1组,即(abc)。
\2引用第2组,\3引用第3组,依此类推。
以下代码显示了如何显示格式化的电话号码。在正则表达式中\b(\d{3})(\d{3})(\d{4})\b, \b表示我们只对单词边界处的十位数字感兴趣。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
//www.yiidian.com 一点教程网
public class Main {
public static void main(String[] args) {
String regex = "\\b(\\d{3})(\\d{3})(\\d{4})\\b";
Pattern p = Pattern.compile(regex);
String source = "1234567890, 12345, and 9876543210";
Matcher m = p.matcher(source);
while (m.find()) {
System.out.println("Phone: " + m.group() + ", Formatted Phone: ("
+ m.group(1) + ") " + m.group(2) + "-" + m.group(3));
}
}
}
以上代码执行结果为:
Phone:1234567890,Formatted Phone:(123)456-7890
Phone:9876543210,Formatted Phone:(987)654-3210
2 组的案例
以下代码表示如何在替换文本中引用组。
$n,其中n是组号,替换文本内指的是group的匹配文本n。
例如,$1指的是第一个匹配的组。要重新格式化电话号码,我们将使用($1) $2-$3。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/*www.yiidian.com 一点教程网*/
public class Main {
public static void main(String[] args) {
String regex = "\\b(\\d{3})(\\d{3})(\\d{4})\\b";
String replacementText = "($1) $2-$3";
String source = "1234567890, 12345, and 9876543210";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(source);
String formattedSource = m.replaceAll(replacementText);
System.out.println("Text: " + source);
System.out.println("Formatted Text: " + formattedSource);
}
}
以上代码执行结果为:
Text:1234567890,and 9876543210
Formatted Text:(123)456-7890,12345,and (987)654-3210
热门文章
优秀文章