2009-07-20 38 views
35

Có thể thực hiện từ chối chuỗi trong biểu thức chính quy không? Tôi cần phải khớp tất cả các chuỗi không chứa chuỗi "..". Tôi biết bạn có thể sử dụng ^[^\.]*$ để khớp tất cả các chuỗi không chứa "." nhưng tôi cần phải khớp nhiều hơn một ký tự. Tôi biết tôi có thể chỉ đơn giản là phù hợp với một chuỗi có chứa ".." và sau đó phủ nhận giá trị trả lại của trận đấu để đạt được kết quả tương tự nhưng tôi chỉ tự hỏi nếu nó có thể.Phủ định chuỗi bằng cách sử dụng cụm từ thông dụng

+0

Đã liên kết: [Cụm từ thông dụng và phủ nhận toàn bộ nhóm ký tự] (http://stackoverflow.com/questions/977251/regular-expressions-and-negating-a-whole-character-group) – Unihedron

Trả lời

42

Bạn có thể sử dụng lookaheads tiêu cực:

^(?!.*\.\.).*$ 

Đó gây các biểu hiện không phù hợp nếu nó có thể tìm thấy một chuỗi các hai giai đoạn bất cứ nơi nào trong chuỗi.

+6

Ah, kỹ năng chỉnh sửa ninja :) +1 –

5
^(?:(?!\.\.).)*$ 

sẽ chỉ khớp nếu không có hai dấu chấm liên tiếp ở bất kỳ đâu trong chuỗi.

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