Regex สำหรับสตริงมี?


114

regex คืออะไรเพื่อตรวจสอบว่าสตริงมีคำบางคำ (เช่น 'Test') หรือไม่? ฉันได้ทำ googling ไปบ้างแล้ว แต่ไม่สามารถหาตัวอย่างที่ตรงไปตรงมาของ regex ได้ สิ่งนี้มีไว้สำหรับสร้างสคริปต์ แต่ไม่มีผลกับภาษาโปรแกรมใด ๆ

คำตอบ:


78

สมมติว่ารสชาติ regex แบบ PCRE ปกติ:

หากคุณต้องการตรวจสอบว่าเป็นคำเดียวแบบเต็มก็จะ\bTest\bมีแฟล็กที่เหมาะสมสำหรับการไม่ไวต่อตัวพิมพ์หากต้องการและตัวคั่นสำหรับภาษาโปรแกรมของคุณ \bหมายถึง "ขอบเขตคำ" นั่นคือจุดระหว่างอักขระที่สามารถพิจารณาคำว่าเริ่มต้นหรือสิ้นสุดได้ ตัวอย่างเช่นเนื่องจากมีการใช้ช่องว่างเพื่อแยกคำจึงมีขอบเขตของคำที่ด้านใดด้านหนึ่งของช่องว่าง

หากคุณต้องการตรวจสอบว่าเป็นส่วนหนึ่งของคำให้Testใช้แฟล็กที่เหมาะสมอีกครั้งสำหรับกรณีไม่คำนึงถึงตัวพิมพ์เล็กและใหญ่ โปรดทราบว่าโดยปกติแล้วเมธอด "สตริงย่อย" เฉพาะมักจะเร็วกว่าในกรณีนี้เนื่องจากจะลบค่าใช้จ่ายในการแยกวิเคราะห์นิพจน์ทั่วไป


1
" \bหมายถึง" ขอบเขตคำ "นั่นคือสิ่งที่คั่นสองคำ (เช่นช่องว่าง)" \bไม่ตรงกับช่องว่าง เป็นการยืนยันที่จับคู่ระหว่างอักขระ (หรือที่จุดเริ่มต้นหรือจุดสิ้นสุดของบรรทัดในกรณีส่วนใหญ่)
strager

1
@strager: ใช่คุณพูดถูก - คำอธิบายของฉันไม่ชัดเจนเล็กน้อย ฉันจะแก้ไข
Michael Madsen

117

อย่ายึดรูปแบบของคุณ:

/Test/

regex ข้างต้นจะตรวจสอบว่าพบสตริงตัวอักษร "Test" อยู่ที่ไหนสักแห่งในนั้น


2
ขอบคุณฉันไม่รู้ว่ามันง่ายขนาดนั้น! ฉันไม่เห็นสิ่งนี้ใน Google ของฉันอย่างแน่นอน อย่ายึดรูปแบบของฉันหมายความว่าอย่างไร
GurdeepS

7
คุณสามารถยึดรูปแบบเพื่อจับคู่กับจุดเริ่มต้นหรือจุดสิ้นสุดของสตริงเช่น / ^ Test / หรือ / Test $ / ตามลำดับหรือแม้กระทั่ง / ^ Test $ / เพื่อให้ตรงกันทั้งหมด ตัวอย่างนี้เป็นผลเสียเนื่องจากไม่ได้ให้ประโยชน์ใด ๆ กับการเปรียบเทียบเพื่อความเท่าเทียมกัน แต่ตัวอย่างเช่นเมื่อทำการตรวจสอบความถูกต้องของฟิลด์ในแบบฟอร์ม regex เช่น / ^ \ d + $ / จะจับคู่ก็ต่อเมื่อฟิลด์นั้นมีตัวเลขอย่างน้อยหนึ่งหลักและไม่มีอะไรเลยนอกจากตัวเลขเท่านั้น
David Clarke

-13

ฉันมาช้าไปสองสามปี แต่ทำไมไม่เป็นแบบนี้ล่ะ?

[Tt][Ee][Ss][Tt]

4
คำตอบนี้ปรากฏในคิวการตรวจสอบคุณภาพต่ำน่าจะเป็นเพราะคุณไม่ได้อธิบายโค้ด หากคุณอธิบาย (ในคำตอบของคุณ) คุณมีแนวโน้มที่จะได้รับคะแนนโหวตเพิ่มมากขึ้นและผู้ถามก็ได้เรียนรู้บางสิ่ง!
The Guy with The Hat

6
คำนี้ไม่สามารถเข้าใจได้ทั่วไป - ลองนึกดูว่าคำที่คุณต้องค้นหามาจากผู้ใช้หรือไม่ คุณจะต้องสร้าง[Aa]รูปแบบสำหรับทุกตัวอักษรและมันจะค่อนข้างน่าเกลียดอย่างรวดเร็ว
Platinum Azure
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.