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 ข้างต้นตั้งแต่ที่คุณกำลังค้นหาคำโดยไม่ต้องstore
s
.
โดยปกติจะจับคู่อักขระใด ๆยกเว้น อักขระบรรทัดใหม่จำนวนหนึ่ง (?s)
ในตอนต้นทำให้.
ตรงกับตัวละครใด ๆ โดยไม่มีข้อยกเว้น (ขอบคุณ Tim Pietzcker ที่ชี้ให้เห็นสิ่งนี้)
(?s)
จุดเริ่มต้นของ regex ในกรณีที่สตริงมีการขึ้นบรรทัดใหม่