วิธีการค้นหาหนึ่งในสองสายที่คล้ายกันในกลุ่ม?


29

ในกลุ่มถ้าฉันต้องการค้นหาที่ตรงกับ "planA" หรือ "planB" ฉันรู้ว่าฉันสามารถทำได้:

/plan[AB]

ทำงานได้เนื่องจาก regex อนุญาตให้ A หรือ B เป็นชุดอักขระ

แต่ฉันจะระบุหนึ่งในสองสายที่สมบูรณ์ได้อย่างไร ตัวอย่างเช่น "planetAwesome" หรือ "planetTerrible"?

สิ่งนี้จะจับคู่ทั้งสองสิ่งนี้พร้อมกับ "ดาวเคราะห์ทุกสิ่งที่นี่ยาวแค่ตัวอักษร":

planet\([a-zA-Z]*\)

ฉันจะตรงกับเพียงสตริงที่การแข่งขัน "planetAwesome" หรือ "planetTerrible" ว่า?


ที่จริงแล้ววงเล็บสร้างคลาสตัวละคร plan[ABC]ตรงกับplanA, planBและplanCเท่าเทียมกันดี
Christopher Bottoms

@molsecules - ถูกต้องขอบคุณ ฉันอัพเดทคำถาม
นาธานลอง

คำตอบ:


43
/planet\(Awesome\|Terrible\)

หากต้องการดูเอกสารที่เกี่ยวข้องให้ออก:help /และเลื่อนลงไปที่ส่วน“ คำจำกัดความของรูปแบบ”


1
Ah! ฉันไม่ได้หนีวงเล็บเมื่อฉันลองทำสิ่งนี้ ที่น่าสนใจ - ฉันคิดว่าฉันต้องหนีจากตัวละครที่แท้จริง
นาธานลอง

1
@Nathan: เอนจิ้น regex หลายตัวมีกฎที่แตกต่างกันเกี่ยวกับตัวละครที่ต้องหลบหนีเพื่อทำให้พวกมันพิเศษและต้องหนีออกมาเพื่อทำให้มันเป็นตัวอักษร (เช่น POSIX BRE vs. ERE) คุณสามารถปรับแต่งความต้องการหลบหนีในกลุ่มบนพื้นฐานต่อรูปแบบโดยรวมถึงหนึ่งของหนีพิเศษ: \m, \M,\v\Vหรือ นอกจากนี้ยังมี'magic'ตัวเลือกแต่โดยปกติแล้วจะเป็นการดีที่สุดหากปล่อยไว้ตามลำพังเนื่องจากมีผลกระทบทั่วโลก
Chris Johnsen

1
ใช้เวทมนตร์มากดูเหมือนว่านี้:/\vplanet(Awesome|Terrible)
SergioAraujo

4

หากต้องการเพิ่มคำตอบของ Gilles คุณอาจต้องการเพิ่มบางสิ่งในนั้น:

/\<planet\(Awesome\|Terrible\)\>

\<ทำเครื่องหมายจุดเริ่มต้นของ 'คำ' (ตัวอักษรและตัวเลขเป็นหลัก)
\>ทำเครื่องหมายจุดสิ้นสุดของ 'คำว่า' (ตัวอักษรและตัวเลขเป็นหลัก)

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