2009-08-23 37 views
20

Tôi muốn khớp với bất kỳ chuỗi nào không chứa chuỗi "DontMatchThis".C# Regex có khớp với một chuỗi không chứa một chuỗi nhất định không?

Regex là gì?

+0

Tại sao bạn muốn làm điều này với regex và không sử dụng String.IndexOf? –

+12

Bởi vì đôi khi regex của bạn là trong cấu hình và bạn không thể thay đổi mã. Hoặc bởi vì bạn cần nó như là một biểu hiện subexpression phức tạp hơn. Hoặc bất kỳ một trong một số lý do. Bạn cũng có thể hỏi, "Tại sao bạn không để cho con mèo của bạn mime các văn bản cho bạn thông qua phương tiện của khiêu vũ diễn giải để thay thế?". Đôi khi bạn không có con mèo của bạn để tay. –

Trả lời

45

thử điều này:

^(?!.*DontMatchThis).*$ 
+11

Vui lòng giải thích một số. Làm thế nào điều này hoạt động? – bikashg

+0

@bikashg: xem tại đây: http://stackoverflow.com/a/11125488/47190 –

11

Các regex để phù hợp với một chuỗi không chứa một mô hình nào đó được

(?s)^(?!.*DontMatchThis).*$ 

Nếu bạn sử dụng các mô hình mà không có sự (?s) (đó là một phiên bản nội tuyến của cờ RegexOptions.Singleline làm cho . khớp với biểu tượng LF mới cũng như tất cả các ký tự khác), DontMatchThis sẽ chỉ được tìm kiếm trên dòng đầu tiên và chỉ một chuỗi không có ký hiệu LF sẽ được đối sánh với .*.

Pattern chi tiết:

  • (?s) - một DOTALL/modifier Singleline làm . trận đấu bất kỳ ký tự
  • ^ - khởi đầu của chuỗi neo
  • (?!.*DontMatchThis) - một negative lookahead kiểm tra nếu có bất kỳ 0 hoặc nhiều ký tự hơn (phù hợp với tham số .* subpattern - CHÚ Ý lười biếngPhiên bản 0 (phù hợp với ít ký tự nhất có thể trước khi kết hợp subpattern tiếp theo) có thể hoàn thành công việc nhanh hơn nếu DontMatchThis được dự kiến ​​gần hơn với chuỗi bắt đầu) theo sau với DontMatchThis
  • .* - bất kỳ số nào hoặc nhiều ký tự, càng nhiều càng tốt, tối đa
  • $ - kết thúc chuỗi (xem Ký tự neo: Dollar ($)).
+1

Đây là bổ sung tốt cho câu trả lời được chấp nhận. – VMAtm

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