นิพจน์ปกติสำหรับสตริงที่ไม่ได้ขึ้นต้นด้วยลำดับ


197

ฉันกำลังประมวลผลตารางจำนวนมากโดยใช้โปรแกรมนี้แต่ฉันต้องไม่สนใจสิ่งที่ขึ้นต้นด้วยป้ายกำกับ "tbd_" จนถึงตอนนี้ฉันมีบางอย่างเช่น [^ tbd_] แต่นั่นก็ไม่ตรงกับตัวละครเหล่านั้น


SchemaSpy ทำงานอย่างไร คุณกำลังส่งรายชื่อตารางหรือคุณส่งมันผ่าน regex และทำการจับคู่หรือไม่
Mark Biek

ฉันผ่าน regex (มันเป็น -i ธง) และมันจะนำเข้าการแข่งขันหรือเพื่อที่จะบอกว่าในกรณีใด ๆ =)
echoblaze

4
@echoblaze: หากคุณกำลังประมวลผล XML ทำไมคุณไม่ใช้โปรแกรมแยกวิเคราะห์ XML? นั่นจะง่ายกว่าการใช้นิพจน์ทั่วไป
Gumbo

คำตอบ:


335

คุณสามารถใช้การยืนยันการดูล่วงหน้าในเชิงลบ:

^(?!tbd_).+

หรือการยืนยันในเชิงลบ:

(^.{1,3}$|^.{4}(?<!tbd_).*)

หรือเพียงแค่ชุดตัวละครและตัวเลือกเก่า:

^([^t]|t($|[^b]|b($|[^d]|d($|[^_])))).*

6
สิ่งนี้ จำกัด เฉพาะเอ็นจิน regex หรือไม่?
Mark Biek

1
ฉันถามเพียงเพราะคนที่สองนั้นยังคงดูเหมือน tbd_ ในการทดสอบของฉัน คนแรกดีมาก
Mark Biek

5
ลองดูที่การเปรียบเทียบรสชาติ regular-expressions.info ของ: regular-expressions.info/refflavors.html
กระเจี๊ยบ

1
@Gumbo - ไม่ควรสิ้นสุด * แทน. +? สตริงที่เป็น tbd_ เริ่มต้นด้วย ... ดังนั้นตามนิยามไม่จำเป็นต้องตามด้วยอักขระอื่น ๆ ? มิฉะนั้นเป็นตัวอย่างที่ดี มันไม่จำเป็นต้องมีเครื่องมือที่สนับสนุน regex LookAround แม้ว่า
BenAlabaster

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