2009-06-05 33 views
23

Với PCRE, bạn có thể xây dựng một biểu thức sẽ chỉ khớp như thế nào nếu một chuỗi là không phải là được tìm thấy.Đảo ngược kết quả bằng regexp

Nếu tôi đang sử dụng grep (không phải là tôi), tôi muốn tùy chọn -v.

Ví dụ cụ thể hơn: Tôi muốn regexp của tôi khớp với chuỗi iff fookhông phải là trong chuỗi. Vì vậy, nó sẽ phù hợp với bar nhưng sẽ không foobar.

+0

Bạn đang sử dụng ngôn ngữ nào? – innaM

+0

Đây là đầu vào vào một dịch vụ web quảng cáo PCRE. Vì vậy, ngôn ngữ thực sự là PCRE. –

+1

Nhân bản: http://stackoverflow.com/questions/850907/regular-expression-opposite –

Trả lời

41

Được rồi, tôi đã tinh chỉnh biểu thức chính quy của mình dựa trên giải pháp mà bạn đã đưa ra (kết hợp sai với các chuỗi bắt đầu bằng 'kiểm tra').

^((?!foo).)*$ 

Cụm từ thông dụng này sẽ chỉ khớp với các chuỗi không chứa foo. Cái nhìn đầu tiên sẽ từ chối các chuỗi bắt đầu bằng 'foo', và cái thứ hai sẽ đảm bảo rằng foo không được tìm thấy ở đâu đó trong chuỗi.

1

Thực sự gần như trùng lặp. Tôi đoán regex bạn đang muốn tìm

(foo?!) *

3

Dựa trên câu trả lời của Daniel, tôi nghĩ rằng tôi đã có một cái gì đó mà làm việc:.

^(.(?!test))*$ 

Điều quan trọng là mà bạn cần phải thực hiện sự khẳng định tiêu cực trên tất cả các nhân vật trong chuỗi

+0

Tôi không tin rằng điều này sẽ hoạt động; nó sẽ khớp với chuỗi 'test'. –

+0

Bắn - bạn nói đúng. Điều này là tốt, đủ cho kịch bản hiện tại của tôi là trường hợp cạnh đó không trúng, nhưng nó không hoàn toàn giải quyết vấn đề. –

+0

Tôi đã xóa câu trả lời ban đầu của mình và đăng câu trả lời mới hoàn toàn giải quyết vấn đề, bao gồm cả trường hợp cạnh. Về cơ bản câu trả lời ban đầu của tôi bị từ chối chuỗi bắt đầu với chuỗi con của bạn, và bạn từ chối các chuỗi có chứa chuỗi con nhưng không bắt đầu bằng chuỗi đó. Đặt chúng lại với nhau là giải pháp. :) –

-1

xây dựng một biểu thức phù hợp, và sử dụng! trận() ... (phủ định logic) đó có thể là cách grep làm anyway ...

+0

Tôi không có quyền kiểm soát mã đánh giá kết quả phù hợp trực tiếp, vì vậy, thật không may, không phải là một tùy chọn. –