matches()
sẽ chỉ trả về true nếu chuỗi đầy đủ được khớp.
find()
sẽ cố gắng tìm sự xuất hiện tiếp theo trong chuỗi con phù hợp với biểu thức chính quy. Lưu ý nhấn mạnh vào "tiếp theo". Điều đó có nghĩa là, kết quả của việc gọi find()
nhiều lần có thể không giống nhau. Ngoài ra, bằng cách sử dụng, find()
bạn có thể gọi start()
để trả về vị trí mà chuỗi con được khớp.
final Matcher subMatcher = Pattern.compile("\\d+").matcher("skrf35kesruytfkwu4ty7sdfs");
System.out.println("Found: " + subMatcher.matches());
System.out.println("Found: " + subMatcher.find() + " - position " + subMatcher.start());
System.out.println("Found: " + subMatcher.find() + " - position " + subMatcher.start());
System.out.println("Found: " + subMatcher.find() + " - position " + subMatcher.start());
System.out.println("Found: " + subMatcher.find());
System.out.println("Found: " + subMatcher.find());
System.out.println("Matched: " + subMatcher.matches());
System.out.println("-----------");
final Matcher fullMatcher = Pattern.compile("^\\w+$").matcher("skrf35kesruytfkwu4ty7sdfs");
System.out.println("Found: " + fullMatcher.find() + " - position " + fullMatcher.start());
System.out.println("Found: " + fullMatcher.find());
System.out.println("Found: " + fullMatcher.find());
System.out.println("Matched: " + fullMatcher.matches());
System.out.println("Matched: " + fullMatcher.matches());
System.out.println("Matched: " + fullMatcher.matches());
System.out.println("Matched: " + fullMatcher.matches());
Sẽ xuất:
Tìm thấy: sai
Tìm thấy: đúng - vị trí 4
Tìm thấy: đúng - vị trí 17
Tìm thấy: đúng - vị trí 20
Tìm thấy: sai
Tìm thấy: sai
Khớp: sai
-----------
Đã tìm thấy: true - vị trí 0
Tìm thấy: sai
Tìm thấy: sai
Phù hợp: đúng
Phù hợp: đúng
Phù hợp: đúng
Phù hợp: đúng
Vì vậy, hãy cẩn thận khi gọi find()
nhiều lần nếu Matcher
đối tượng không được đặt lại, ngay cả khi regex được bao quanh ^
và $
để khớp với chuỗi đầy đủ.
find()
nhiều lần có thể trả về các kết quả khác nhau cho cùng một kết quảMatcher
. Xem câu trả lời của tôi dưới đây.