Sie können negierte Zeichenklassen verwenden, um bestimmte Zeichen auszuschließen: Sie [^abcde]stimmen beispielsweise mit allen Zeichen außer a, b, c, d, e überein.
Anstatt alle Zeichen wörtlich anzugeben, können Sie Kurzzeichen in Zeichenklassen verwenden: [\w](Kleinbuchstaben) stimmen mit jedem "Wortzeichen" (Buchstaben, Zahlen und Unterstrich) [\W]überein , (Großbuchstaben) stimmen mit allen anderen als Wortzeichen überein; In ähnlicher Weise [\d]werden die 0-9-Stellen [\D]übereinstimmen, während alles andere als die 0-9-Stellen übereinstimmen, und so weiter.
Es gibt zwei Möglichkeiten, um "Nicht übereinstimmen" zu sagen: Zeichenbereiche und negativer Lookahead / Lookbehind mit einer Breite von Null.
Die ehemalige: nicht übereinstimmen a, b, coder 0:[^a-c0]
Letzteres: Entspricht einer beliebigen dreistelligen Zeichenfolge mit Ausnahme von foound bar:
(?!foo|bar).{3}
oder
.{3}(?<!foo|bar)
Auch eine Korrektur für Sie: *, ?und +nicht wirklich alles passen. Sie sind Wiederholungsoperatoren und folgen immer einem übereinstimmenden Operator. So a+eine oder mehrere der Mittel entsprechen a, [a-c0]+Mittel entsprechen einem oder mehreren der a, b, coder 0, während [^a-c0]+würde man erreichen oder mehr von irgendetwas , das war nicht a, b, coder 0.
Antworten:
Sie können negierte Zeichenklassen verwenden, um bestimmte Zeichen auszuschließen: Sie
[^abcde]
stimmen beispielsweise mit allen Zeichen außer a, b, c, d, e überein.Anstatt alle Zeichen wörtlich anzugeben, können Sie Kurzzeichen in Zeichenklassen verwenden:
[\w]
(Kleinbuchstaben) stimmen mit jedem "Wortzeichen" (Buchstaben, Zahlen und Unterstrich)[\W]
überein , (Großbuchstaben) stimmen mit allen anderen als Wortzeichen überein; In ähnlicher Weise[\d]
werden die 0-9-Stellen[\D]
übereinstimmen, während alles andere als die 0-9-Stellen übereinstimmen, und so weiter.Wenn Sie PHP verwenden, können Sie sich die Dokumentation zu Regex-Zeichenklassen ansehen .
quelle
Es gibt zwei Möglichkeiten, um "Nicht übereinstimmen" zu sagen: Zeichenbereiche und negativer Lookahead / Lookbehind mit einer Breite von Null.
Die ehemalige: nicht übereinstimmen
a
,b
,c
oder0
:[^a-c0]
Letzteres: Entspricht einer beliebigen dreistelligen Zeichenfolge mit Ausnahme von
foo
undbar
:(?!foo|bar).{3}
oder
.{3}(?<!foo|bar)
Auch eine Korrektur für Sie:
*
,?
und+
nicht wirklich alles passen. Sie sind Wiederholungsoperatoren und folgen immer einem übereinstimmenden Operator. Soa+
eine oder mehrere der Mittel entsprechena
,[a-c0]+
Mittel entsprechen einem oder mehreren dera
,b
,c
oder0
, während[^a-c0]+
würde man erreichen oder mehr von irgendetwas , das war nichta
,b
,c
oder0
.quelle
^((?!foo).)+$
Passen Sie[^]
(innerhalb von [] ) ist Negation im regulären Ausdruck, während^
"Beginn der Zeichenfolge" ist.[^a-z]
Entspricht einem einzelnen Zeichen, das nicht von "a" bis "z" reicht.^[a-z]
bedeutet, dass die Zeichenfolge mit "a" bis "z" beginntReferenz
quelle
^
Wird am Anfang eines Zeichenbereichs oder bei negativen Lookahead / Lookbehind-Behauptungen verwendet.>>> 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>
quelle
?!
in den letzten 2 Beispielen verwenden oder können Sie nur!
für sich selbst verwenden? Was macht?
da??
um zu erkennen, dass es sich um eine Erweiterung handelt. Andere Regex-Engines haben möglicherweise ihre eigenen Regeln.