Regex กำลังจับคู่ชุดค่าผสมทั้งหมด


1

ฉันมีข้อความต่อไปนี้ด้านล่าง ฉันจะเขียน regex เพื่อจับข้อความทั้งหมดที่เกี่ยวข้องได้REQ_XXXอย่างไร

นี่คือการแสดงออกของฉันแต่มันจับ.*(REQ_.*)\| |3 |4 |5ฉันแค่อยากให้มันหยุดหลังจากครั้งแรกที่|มันเห็น

ป้อนคำอธิบายรูปภาพที่นี่


ฉันคิดว่าคุณควรลบและโพสต์ใน Stackoverflow
johnny

3
ถ้าเราสามารถตอบได้ที่นี่ก็ควรจะดี RegEx อาจเป็นพื้นที่สีเทาระหว่างการเข้ารหัสและการทำงานของแอปพลิเคชัน
music2myear

คำตอบ:


2

คุณสามารถใช้ได้ :

.*(REQ_[^|]*)\|

"|" ตัวละครจะถูกยกเว้น


ลองเพิ่มการอ้างอิงบางอย่างเพื่อสนับสนุนสิ่งที่คุณพูดเช่นกัน
Pimp Juice IT

2

แก้ไข:

.*(REQ_.*?)\|

เคล็ดลับจะ?บอกก่อนที่.*จะหยุดเร็วที่สุด วิธีนี้เป็นครั้งแรกที่ตามยุติขอบเขตของ| .*นี่คือสิ่งที่คุณต้องการ

คำตอบเก่าของฉันอยู่ด้านล่าง มันใช้งานได้ดี แต่ฉันคิดว่าข้างต้นเป็นวิธีที่ถูกต้อง


คำตอบเก่า:

.*การแข่งขัน (เกือบ) |ทุกอย่างรวมถึง ใช้[^|\n]*เพื่อจับคู่ทุกอย่างยกเว้น|และขึ้นบรรทัดใหม่

.*(REQ_[^|]*)\|

\nเป็นสิ่งจำเป็นเนื่องจาก pure [^|]*สามารถขยายการจับคู่มากกว่าหลายบรรทัด ฉันเดาว่าคุณไม่ต้องการสิ่งนี้


1

โซลูชันบางข้อได้โพสต์ไว้แล้วในคำตอบอื่น ๆ ฉันจะให้ข้อมูลสรุปที่นี่

คุณสามารถทำตามแนวทางได้หลายวิธีที่นี่คุณต้องตัดสินใจตามความต้องการของคุณ:

  1. แสดงรายการอักขระที่เป็นบวกที่ปรากฏในรหัสของคุณ:
    .*(REQ_[\w]+)[\s]*\|
    • ในกรณีนี้[\w]+ตรงกับอักขระคำทั้งหมด (ตัวอักษรตัวเลขและ "_")
    • ช่องว่างก่อนหน้า|นี้จะไม่รวมอยู่ในผลลัพธ์ที่คุณบันทึกไว้ ( [\s]*อยู่นอกวงเล็บ)
  2. ระบุรายการอักขระที่คุณต้องการให้ regex หยุด:
    .*(REQ_[^|]+)\|
  3. ใช้การจับคู่แบบขี้เกียจเพื่อหยุดในโอกาสแรก: .*(REQ_.+?)\|

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