นิพจน์ทั่วไปของ Java หรือตัวดำเนินการ


89

นี่อาจเป็นคำถามที่โง่ แต่ฉันหาไม่เจอ:

ฉันจะใช้ตัวดำเนินการ java หรือนิพจน์ทั่วไป (|) โดยไม่มีวงเล็บได้อย่างไร

เช่นโทร | โทรศัพท์ | แฟกซ์


โอเคคุณมีปัญหาอะไร
danben

1
ใช่ควรทำงาน cletus, danben และฉันเห็นด้วย เช่นกัน @danben - ฉันชื่อแดนบีมฮ่า ๆ ๆ ใกล้แล้ว!
Dan Beam

คำตอบ:


156

คุณสามารถใช้ท่อได้ด้วยตัวเอง:

"string1|string2"

ตัวอย่างเช่น:

String s = "string1, string2, string3";
System.out.println(s.replaceAll("string1|string2", "blah"));

เอาท์พุต:

blah, blah, string3

เหตุผลหลักในการใช้วงเล็บคือการ จำกัด ขอบเขตของทางเลือกอื่น:

String s = "string1, string2, string3";
System.out.println(s.replaceAll("string(1|2)", "blah"));

มีผลลัพธ์เดียวกัน แต่ถ้าคุณทำสิ่งนี้:

String s = "string1, string2, string3";
System.out.println(s.replaceAll("string1|2", "blah"));

คุณได้รับ:

blah, stringblah, string3

เพราะคุณเคยพูดว่า "string1" หรือ "2"

หากคุณไม่ต้องการจับส่วนนั้นของนิพจน์ให้ใช้?::

String s = "string1, string2, string3";
System.out.println(s.replaceAll("string(?:1|2)", "blah"));

จะเกิดอะไรขึ้นถ้าฉันต้องการคั่นสตริงเหล่านี้จากส่วนอื่น ๆ ของ regex ที่เป็นสตริงด้วย เช่น eee (ff | gg) eee ต้องใช้วงเล็บหรือไม่
Eric Conner

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