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.
Cả matches() và find() của lớp Matcher đều cố gắng tìm khớp theo biểu thức chính quy trong chuỗi đầu vào. Nếu khớp, cả hai trả về true, nếu không khớp thì false.
Khác biệt chính: Phương thức matches() cố gắng khớp toàn bộ vùng (region) của đầu vào. Tức là nếu bạn tìm chữ số trong một dòng, phương thức này chỉ trả về true nếu input có chữ số ở tất cả các dòng trong vùng.
Ví dụ 1: matches() thất bại vì không khớp toàn bộ văn bản
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
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);
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ả
Không tìm thấy khớp
Giải thích: Regex (.*)(\\d+)(.*) khớp toàn bộ chuỗi, nhưng chuỗi có 3 dòng, dòng 2 và 3 không có chữ số, nên matches() thất bại.
Ngược lại, phương thức find() cố gắng tìm chuỗi con tiếp theo khớp với pattern. Tức là nếu ít nhất một khớp tìm thấy trong vùng, phương thức này trả về true.
Ví dụ 2: find() thành công vì tìm thấy ít nhất một khớp
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
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);
if (matcher.find()) {
System.out.println("Tìm thấy khớp");
} else {
System.out.println("Không tìm thấy khớp");
}
}
}
Kết quả
Tìm thấy khớp
Tóm tắt:
- matches(): Khớp toàn bộ chuỗi/vùng. Tương đương
^regex$. - find(): Tìm bất kỳ chuỗi con nào khớp. Dùng trong vòng lặp để tìm tất cả.