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.