Lớp java.util.regex.Matcher đại diện cho một engine thực hiện các phép toán khớp khác nhau. Không có constructor cho lớp này, bạn có thể tạo/nhận đối tượng của lớp này bằng phương thức matcher() của lớp java.util.regex.Pattern.
Anchoring bounds (ranh giới neo) được dùng để khớp các ranh giới vùng như ^ và $. Mặc định matcher dùng anchoring bounds, bạn có thể chuyển sang non-anchoring bounds bằng phương thức useAnchoringBounds().
Phương thức hasAnchoringBounds() của lớp Matcher kiểm tra xem matcher hiện tại có dùng anchoring bounds hay không. Nếu có, trả về true, ngược lại false.
Ví dụ 1: Mặc định anchoring bounds
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class HasAnchoringBoundsExample {
public static void main(String[] args) {
String regex = "(.*)(\\d+)(.*)";
String input = "This is a sample Text, 1234, with numbers in between. "
+ "\n This is the second line in the text "
+ "\n This is third line in the text";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
// Kiểm tra anchoring bounds
boolean bool = matcher.hasAnchoringBounds();
// Kiểm tra khớp
if (bool) {
System.out.println("Matcher hiện tại dùng anchoring bounds");
} else {
System.out.println("Matcher hiện tại dùng non-anchoring bounds");
}
if (matcher.matches()) {
System.out.println("Tìm thấy khớp");
} else {
System.out.println("Không tìm thấy khớp");
}
}
}
Kết quả
Matcher hiện tại dùng anchoring bounds Không tìm thấy khớp
Ví dụ 2: Tắt anchoring bounds
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Trail {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
System.out.println("Nhập chuỗi đầu vào");
String input = sc.nextLine();
String regex = ".*\\d+.*";
Pattern pattern = Pattern.compile(regex);
System.out.println("Biểu thức chính quy đã biên dịch: " + pattern.toString());
Matcher matcher = pattern.matcher(input);
matcher.useAnchoringBounds(false);
boolean hasBounds = matcher.hasAnchoringBounds();
if (hasBounds) {
System.out.println("Matcher hiện tại dùng anchoring bounds");
} else {
System.out.println("Matcher hiện tại dùng non-anchoring bounds");
}
// Kiểm tra có chữ số không
if (matcher.matches()) {
System.out.println("Chuỗi đã cho chứa chữ số");
} else {
System.out.println("Chuỗi đã cho không chứa chữ số");
}
}
}
Kết quả
Nhập chuỗi đầu vào hello sample 2 Biểu thức chính quy đã biên dịch: .*\d+.* Matcher hiện tại dùng non-anchoring bounds Chuỗi đã cho chứa chữ số