2008-09-22 30 views

Trả lời

45
^(?:(?!boon\.ini|http).)*$\r?\n? 

(lấy từ thư viện RegexBuddy 's) sẽ phù hợp với bất kỳ dòng không chứa boon.ini và/hoặc http. Là những gì bạn muốn?

13

Thay vì phủ nhận kết quả trong biểu thức, bạn nên làm điều đó trong mã của mình. Bằng cách đó, biểu hiện trở nên khá đơn giản.

\b(boon\.ini|http)\b 

Sẽ trả lại true nếu boon.ini hoặc http ở bất kỳ đâu trong chuỗi của bạn. Nó sẽ không khớp với các từ như httpd hoặc httpxyzzy vì các số \b hoặc từ. Nếu bạn muốn, bạn có thể chỉ cần loại bỏ chúng và nó sẽ phù hợp với những người quá. Để thêm nhiều từ khóa hơn, chỉ cần thêm nhiều đường ống hơn.

\b(boon\.ini|http|foo|bar)\b 
4

bạn có thể được phục vụ tốt bằng cách viết một regex sẽ thành công khi nó gặp các từ bạn đang tìm kiếm và sau đó đảo ngược điều kiện.

Ví dụ, trong perl bạn muốn sử dụng:

if (!/boon\.ini|http/) { 
    # the string passed! 
} 
1

Những thư viện ngôn ngữ/regexp? Tôi nghĩ bạn có câu hỏi là xung quanh ASP.NET, trong trường hợp này bạn có thể thấy phần "tiêu đề tiêu cực" của bài viết này: http://msdn.microsoft.com/en-us/library/ms972966.aspx

Nói một cách chính xác một biểu thức chính quy, vẫn định nghĩa ngôn ngữ thông thường nhưng có rất ít thư viện/ngôn ngữ/công cụ cho phép thể hiện nó.

Nhìn chung tiêu cực có thể phục vụ bạn giống nhau nhưng cú pháp thực tế phụ thuộc vào những gì bạn đang sử dụng. Câu trả lời của Tim là một ví dụ với (?...)

14

Một biểu hiện khác có thể được sử dụng:

^(?!.*IgnoreMe).*$ 

^ = chỉ bắt đầu của dòng
$ = cho biết kết thúc của dòng
(?! Expression) = chỉ không nhìn rộng trước kết quả phủ định trên biểu thức

Cần có ^ ở mặt trước, nếu không thì khi đánh giá giao diện phủ định ahe quảng cáo có thể bắt đầu từ một nơi nào đó bên trong/bên ngoài văn bản 'Bỏ qua' - và tạo một kết hợp mà bạn không muốn nó.

ví dụ: Nếu bạn sử dụng regex:

(?!.*IgnoreMe).*$ 

Với đầu vào "Hello IgnoreMe Hãy", ý chí này sẽ dẫn đến một cái gì đó như: "gnoreMe Hãy" như cái nhìn tiêu cực về phía trước phát hiện ra rằng không có chuỗi hoàn chỉnh 'IgnoreMe' sau 'Tôi'.

2
^[^£]*$ 

Biểu thức trên sẽ chỉ giới hạn biểu tượng bảng tính từ chuỗi. Điều này sẽ cho phép tất cả các ký tự ngoại trừ chuỗi.

0

Tôi sử dụng này (dựa trên Tim Pietzcker câu trả lời) để loại trừ URL subdomain phi sản xuất cho Google Analytics lọc hồ sơ:

^\w+-*\w*\.(?!(?:alpha(123)*\.|beta(123)*\.|preprod\.)domain\.com).*$ 

Bạn có thể thấy bối cảnh ở đây: Regex to Exclude Multiple Words

Các vấn đề liên quan