matches()
จะส่งคืนจริงถ้าจับคู่สตริงทั้งหมดเท่านั้น
find()
จะพยายามค้นหาการเกิดขึ้นครั้งถัดไปภายในซับสตริงที่ตรงกับ regex สังเกตการเน้นที่ "ตัวถัดไป" นั่นหมายความว่าผลลัพธ์ของการโทรfind()
หลายครั้งอาจไม่เหมือนกัน นอกจากนี้โดยใช้find()
คุณสามารถโทรstart()
กลับตำแหน่งย่อยที่ถูกจับคู่
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());
จะส่งออก:
พบ: เท็จ
พบ: จริง - ตำแหน่ง 4
ค้นพบ: จริง - ตำแหน่ง 17
ค้นพบ: จริง - ตำแหน่ง 20
พบ: เท็จ
พบ: เท็จ
จับคู่: เท็จ
-----------
ค้นพบ: จริง - ตำแหน่ง 0
พบ: เท็จ
พบ: เท็จ
จับคู่: จริง
จับคู่: จริง
จับคู่: จริง
จับคู่: จริง
ดังนั้นควรระมัดระวังเมื่อโทรfind()
หลายครั้งหากMatcher
วัตถุไม่ได้ถูกรีเซ็ตแม้ว่า Regex จะล้อมรอบด้วย^
และ$
จับคู่กับสตริงทั้งหมด
find()
Matcher
ดูคำตอบของฉันด้านล่าง