ฉันมีข้อความต่อไปนี้ด้านล่าง ฉันจะเขียน regex เพื่อจับข้อความทั้งหมดที่เกี่ยวข้องได้REQ_XXX
อย่างไร
นี่คือการแสดงออกของฉันแต่มันจับ.*(REQ_.*)\|
|3 |4 |5
ฉันแค่อยากให้มันหยุดหลังจากครั้งแรกที่|
มันเห็น
ฉันมีข้อความต่อไปนี้ด้านล่าง ฉันจะเขียน regex เพื่อจับข้อความทั้งหมดที่เกี่ยวข้องได้REQ_XXX
อย่างไร
นี่คือการแสดงออกของฉันแต่มันจับ.*(REQ_.*)\|
|3 |4 |5
ฉันแค่อยากให้มันหยุดหลังจากครั้งแรกที่|
มันเห็น
คำตอบ:
คุณสามารถใช้ได้ :
.*(REQ_[^|]*)\|
"|" ตัวละครจะถูกยกเว้น
แก้ไข:
.*(REQ_.*?)\|
เคล็ดลับจะ?
บอกก่อนที่.*
จะหยุดเร็วที่สุด วิธีนี้เป็นครั้งแรกที่ตามยุติขอบเขตของ|
.*
นี่คือสิ่งที่คุณต้องการ
คำตอบเก่าของฉันอยู่ด้านล่าง มันใช้งานได้ดี แต่ฉันคิดว่าข้างต้นเป็นวิธีที่ถูกต้อง
คำตอบเก่า:
.*
การแข่งขัน (เกือบ) |
ทุกอย่างรวมถึง ใช้[^|\n]*
เพื่อจับคู่ทุกอย่างยกเว้น|
และขึ้นบรรทัดใหม่
.*(REQ_[^|]*)\|
\n
เป็นสิ่งจำเป็นเนื่องจาก pure [^|]*
สามารถขยายการจับคู่มากกว่าหลายบรรทัด ฉันเดาว่าคุณไม่ต้องการสิ่งนี้
โซลูชันบางข้อได้โพสต์ไว้แล้วในคำตอบอื่น ๆ ฉันจะให้ข้อมูลสรุปที่นี่
คุณสามารถทำตามแนวทางได้หลายวิธีที่นี่คุณต้องตัดสินใจตามความต้องการของคุณ:
.*(REQ_[\w]+)[\s]*\|
[\w]+
ตรงกับอักขระคำทั้งหมด (ตัวอักษรตัวเลขและ "_")|
นี้จะไม่รวมอยู่ในผลลัพธ์ที่คุณบันทึกไว้ ( [\s]*
อยู่นอกวงเล็บ).*(REQ_[^|]+)\|
.*(REQ_.+?)\|
หากREQ_
มีผู้ติดตาม allways โดยตัวอักษรคำว่าคุณก็สามารถใช้REQ_w+
หรือถ้าคุณไม่ต้องการที่จะตรงกับABCREQ_123
ใช้ขอบเขตของคำ\bREQ_\w+
: