Który operator wyrażenia regularnego oznacza „Nie” pasuje do tego znaku?


Odpowiedzi:


88

Możesz użyć zanegowanych klas znaków, aby wykluczyć określone znaki: na przykład [^abcde]dopasuje wszystko oprócz znaków a, b, c, d, e.

Zamiast podawać wszystkie znaki dosłownie, możesz używać skrótów wewnątrz klas znaków: [\w](małe litery) dopasują dowolny „znak słowa” (litera, cyfry i podkreślenie), [\W](wielkie litery) dopasują wszystko inne niż znaki słowa; podobnie, [\d]dopasuje cyfry 0-9, podczas gdy [\D]dopasuje wszystko oprócz cyfr 0-9 i tak dalej.

Jeśli używasz PHP, możesz zapoznać się z dokumentacją klas znaków wyrażeń regularnych .


80

Istnieją dwa sposoby na powiedzenie „nie pasuje”: zakresy znaków i ujemne wybieganie w przód / w tył o zerowej szerokości.

Były: nie pasują a, b, club 0:[^a-c0]

Ten ostatni: dopasuj dowolny trzyliterowy ciąg z wyjątkiem fooi bar:

(?!foo|bar).{3}

lub

.{3}(?<!foo|bar)

Ponadto korekta dla Ciebie: *, ?a +nie faktycznie pasuje do niczego. Są operatorami powtórzeń i zawsze następują po operatorze dopasowania. Zatem a+środki dopasować jedną lub więcej a, [a-c0]+środki dopasować jedną lub więcej a, b, club 0, gdy [^a-c0]+będzie pasować do jednego lub więcej z niczego, co nie było a, b, club 0.


^((?!foo).)+$Dopasuj dowolną linię niezawierającą foo regex101.com/r/z6a65l/4
Levi Baguley

48

[^] (w [] ) jest negacją w wyrażeniu regularnym, podczas gdy ^jest „początkiem łańcucha”

[^a-z] dopasowuje dowolny pojedynczy znak, który nie jest od „a” do „z”

^[a-z] oznacza, że ​​ciąg zaczyna się od „a” do „z”

Odniesienie


8

^ używane na początku zakresu znaków lub ujemnych potwierdzeń lookahead / lookbehind.

>>> re.match('[^f]', 'foo')
>>> re.match('[^f]', 'bar')
<_sre.SRE_Match object at 0x7f8b102ad6b0>
>>> re.match('(?!foo)...', 'foo')
>>> re.match('(?!foo)...', 'bar')
<_sre.SRE_Match object at 0x7f8b0fe70780>

Czy musisz użyć ?!w ostatnich 2 przykładach, czy możesz po prostu użyć !samego? Co ?tam robi?
Kliknij przycisk „Za głosowaniem”

Python potrzebuje ?, aby powiedzieć, że jest to rozszerzenie. Inne silniki wyrażeń regularnych mogą mieć własne reguły.
Ignacio Vazquez-Abrams

@Click: To całkiem standardowe. regular-expressions.info/refadv.html , również większość podręczników do silników regexp mówi to samo.
Amadan
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.