เป็นไปได้ไหมที่จะใช้งานไม่ได้ในการแสดงออกปกติใน TextMate?


15

ฉันมีโครงการ Matlab ที่ฉันทำงานใน TextMate editor OSX ฉันต้องการค้นหาคำทั้งหมดบางคำสมมติว่าเป็น "foo" ซึ่งไม่ได้นำหน้าด้วย "" หรือประสบความสำเร็จโดย "/"

อย่างไรก็ตามฉันไม่สามารถหาวิธีค้นหานิพจน์ทั่วไปที่กำหนดในลักษณะลบได้ ไม่มีใครรู้ว่ามันเป็นไปได้ที่จะค้นหาสิ่งที่ต้องการ "A นำหน้าด้วยสิ่งอื่นที่ไม่ใช่ B"?

(TextMate ใช้ตัว ไลบรารีนิพจน์ทั่วไปของ Oniguruma โดย K. Kosako)

คำตอบ:


21

คุณต้องการใช้ไวยากรณ์นี้เล็กน้อย:

(?=subexp)         look-ahead
(?!subexp)         negative look-ahead
(?<=subexp)        look-behind
(?<!subexp)        negative look-behind

ในกรณีของคุณ (?<!\.)foo(?!/)


1
น่ากลัว! ฉันมองข้ามสิ่งที่อยู่ในเอกสาร ขอบคุณ :)
Nagel

6

^ (หมวกหรือหมวกอ่อน) ในเครื่องหมายวงเล็บเหลี่ยมจะลบล้างการแสดงออก ดังนั้นเพื่อค้นหา "foo" ที่ไม่ได้นำหน้าด้วย "." อยากจะเป็น:

[^.]foo

ที่ควรจะเป็น (^|[^.])(foo) และยังจับคู่อักขระพิเศษหนึ่งตัว
ctrl-alt-delor

ขอบคุณไบรอัน! นี่คือตัวแปรที่ฉันลองในตอนแรก แต่ฉันทำไวยากรณ์ผิดและลอง ^ [\.] แทน [^ \.]: P
Nagel

1
สิ่งนี้ใช้ไม่ได้ คุณต้องการตัวละครทั้งหมดยกเว้น '.' ซึ่งหมายถึง 'ตัวละครใด ๆ ' คุณต้องหลบหนี: (^ | [^ \.]) (foo)
Andras Gyomrey
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.