*, ?, +wszystkie znaki oznaczają dopasowanie do tego znaku. Który znak oznacza „nie” pasuje do tego? Przykłady by pomogły.
*, ?, +wszystkie znaki oznaczają dopasowanie do tego znaku. Który znak oznacza „nie” pasuje do tego? Przykłady by pomogły.
Odpowiedzi:
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 .
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
[^] (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”
^ 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>
?!w ostatnich 2 przykładach, czy możesz po prostu użyć !samego? Co ?tam robi?
?, aby powiedzieć, że jest to rozszerzenie. Inne silniki wyrażeń regularnych mogą mieć własne reguły.