在Java的Matcher類中,分組捕獲是一種非常有用的功能,可以讓我們在正則表達式中捕獲多個子串,并對每個子串進行處理。下面是一些在分組捕獲中的技巧:
使用括號 () 來創(chuàng)建一個捕獲組,在正則表達式中,括號中的內(nèi)容會被捕獲到一個組中,并可以通過Matcher的group方法來獲取這個組的內(nèi)容。
使用 | 來表示或操作符,可以在括號內(nèi)部使用 | 來捕獲多個可能的子串。
使用非捕獲組 (?:) 來表示不捕獲的組,即不會讓該組的內(nèi)容出現(xiàn)在group方法的結(jié)果中。
使用命名捕獲組 (?
使用反向引用 \n 來引用前面捕獲到的組,可以在正則表達式中通過\1、\2等來引用前面的捕獲組。
下面是一個示例代碼,演示了如何使用Matcher類進行分組捕獲:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String text = "Hello, my email is john@example.com and my phone number is 123-456-7890";
Pattern pattern = Pattern.compile("([a-zA-Z0-9]+@[a-zA-Z0-9]+\\.[a-zA-Z0-9]+)|(\\d{3}-\\d{3}-\\d{4})");
Matcher matcher = pattern.matcher(text);
while (matcher.find()) {
if (matcher.group(1) != null) {
System.out.println("Email: " + matcher.group(1));
}
if (matcher.group(2) != null) {
System.out.println("Phone: " + matcher.group(2));
}
}
}
}
在這個例子中,我們使用正則表達式來匹配郵箱地址和電話號碼,并使用捕獲組來分別捕獲這兩個子串。然后在循環(huán)中通過matcher.group方法來獲取捕獲組的內(nèi)容,并輸出到控制臺。