String.contains
String.containsทำงานร่วมกับ String, period มันใช้ไม่ได้กับ regex จะตรวจสอบว่า String ที่ระบุปรากฏใน String ปัจจุบันหรือไม่
โปรดทราบString.containsว่าไม่ได้ตรวจสอบขอบเขตของคำ เพียงแค่ตรวจสอบสตริงย่อย
โซลูชัน Regex
Regex มีประสิทธิภาพมากกว่าString.containsเนื่องจากคุณสามารถบังคับใช้ขอบเขตของคำกับคำหลัก (และอื่น ๆ อีกมากมาย) ซึ่งหมายความว่าคุณสามารถค้นหาคำหลักที่เป็นคำพูดมากกว่าแค่สตริง
ใช้String.matchesกับ regex ต่อไปนี้:
"(?s).*\\bstores\\b.*\\bstore\\b.*\\bproduct\\b.*"
RAW regex (ลบการ Escape ที่ทำในตัวอักษรสตริง - นี่คือสิ่งที่คุณจะได้รับเมื่อคุณพิมพ์สตริงด้านบน):
(?s).*\bstores\b.*\bstore\b.*\bproduct\b.*
การตรวจสอบสำหรับขอบเขตของคำเพื่อที่คุณจะไม่ได้รับการแข่งขัน\b restores store productsโปรดทราบว่าstores 3store_productถูกปฏิเสธเช่นกันเนื่องจากตัวเลขและ_ถือเป็นส่วนหนึ่งของคำ แต่ฉันสงสัยว่ากรณีนี้จะปรากฏในข้อความที่เป็นธรรมชาติ
เนื่องจากมีการตรวจสอบขอบเขตของคำทั้งสองด้านนิพจน์ด้านบนจะค้นหาคำที่ตรงกัน ในคำอื่น ๆstores stores productจะไม่ตรงกับ regex ข้างต้นตั้งแต่ที่คุณกำลังค้นหาคำโดยไม่ต้องstores
.โดยปกติจะจับคู่อักขระใด ๆยกเว้น อักขระบรรทัดใหม่จำนวนหนึ่ง (?s)ในตอนต้นทำให้.ตรงกับตัวละครใด ๆ โดยไม่มีข้อยกเว้น (ขอบคุณ Tim Pietzcker ที่ชี้ให้เห็นสิ่งนี้)
(?s)จุดเริ่มต้นของ regex ในกรณีที่สตริงมีการขึ้นบรรทัดใหม่