Có thể sử dụng KHÔNG trong một biểu thức chính quy trong TextMate không?


22

Tôi có một dự án Matlab mà tôi đang làm việc trong TextMate của trình soạn thảo OSX. Tôi cần tìm tất cả các trường hợp của một từ nào đó, giả sử đó là "foo", không phải là trước "." hoặc thành công bởi một "/".

Tuy nhiên, tôi không thể tìm thấy bất kỳ cách nào để tìm kiếm các biểu thức chính quy được định nghĩa phủ định như thế này. Có ai biết nếu có thể tìm kiếm một cái gì đó như "A đứng trước bất cứ thứ gì khác ngoài B" không?

(TextMate sử dụng thư viện biểu thức chính quy Oniguruma của K. Kosako.)

Câu trả lời:


31

Bạn muốn sử dụng bit cú pháp này:

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

Trong trường hợp của bạn, (?<!\.)foo(?!/)


1
Tuyệt vời! Tôi bỏ qua những người trong tài liệu. Cảm ơn :)
Nagel

Đây là một giải pháp tuyệt vời cũng có tính đến sự xuất hiện của từ fooở đầu hoặc cuối văn bản.
simhumileco

13

^ (Dấu mũ hoặc dấu mũ) bên trong dấu ngoặc vuông phủ định biểu thức. Vì vậy, để tìm một "foo" không có trước "." sẽ là:

[^.]foo

điều đó nên (^|[^.])(foo)và nó cũng phù hợp với một nhân vật phụ.
ctrl-alt-delor

Cảm ơn, Brian! Đây là biến thể tôi đã thử ban đầu, nhưng tôi đã nhầm cú pháp và thử ^ [\.] Thay vì [^ \.]: P
Nagel

1
Điều này sẽ không làm việc. Bạn muốn tất cả các nhân vật ngoại trừ '.' có nghĩa là 'bất kỳ nhân vật'. Bạn cần phải thoát nó: (^ | [^ \.]) (Foo)
Andras Gyomrey
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.