2009-07-20 25 views
35

Czy można dokonywać negacji łańcuchowej w wyrażeniach regularnych? Muszę dopasować wszystkie ciągi, które nie zawierają ciągu "..". Wiem, że możesz użyć ^[^\.]*$, aby dopasować wszystkie ciągi, które nie zawierają ".", ale muszę dopasować więcej niż jedną literę. Wiem, że mogę po prostu dopasować ciąg zawierający "..", a następnie zanegować wartość zwracaną meczu, aby osiągnąć ten sam wynik, ale zastanawiałem się, czy to było możliwe.Negacja ciągu za pomocą wyrażeń regularnych

+0

Powiązane: [Wyrażenia regularne i negowanie całej grupy znaków] (http://stackoverflow.com/questions/977251/regular-expressions-and-negating-a-whole-character-group) – Unihedron

Odpowiedz

42

Można użyć negatywne lookaheads:

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

który powoduje, że wyrażenie nie odpowiadają, jeżeli można znaleźć sekwencję dwóch okresów w dowolnym miejscu łańcucha.

+6

Ah, umiejętności edycji ninja :) +1 –

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

będzie pasować tylko wtedy, gdy nie ma dwóch kolejnych kropek w dowolnym miejscu ciągu.

Powiązane problemy