Quale operatore di espressione regolare significa "Non" corrisponde a questo carattere?


Risposte:


92

È possibile utilizzare classi di caratteri negate per escludere determinati caratteri: ad esempio [^abcde], corrisponderà a qualsiasi cosa tranne che a caratteri a, b, c, d, e.

Invece di specificare tutti i caratteri letteralmente, puoi usare abbreviazioni all'interno delle classi di caratteri: [\w](minuscolo) corrisponderà a qualsiasi "carattere della parola" (lettera, numeri e trattino basso), [\W](maiuscolo) corrisponderà a qualsiasi cosa tranne che ai caratteri delle parole; allo stesso modo,[\d] corrisponderà alle cifre 0-9 mentre [\D]corrisponde a qualsiasi cosa tranne le cifre 0-9 e così via.

Se usi PHP puoi dare un'occhiata alla documentazione delle classi di caratteri regex .


82

Esistono due modi per dire "non corrispondono": intervalli di caratteri e lookahead / lookbehind negativo di larghezza zero.

Il primo: non corrispondono a, b, co0 :[^a-c0]

Quest'ultimo: corrisponde a qualsiasi stringa di tre lettere tranne fooe bar:

(?!foo|bar).{3}

o

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

Inoltre, una correzione per voi: *, ?e +non in realtà corrispondono nulla. Sono operatori di ripetizione e seguono sempre un operatore di corrispondenza. Così, a+mezzi corrispondono uno o più dei a, [a-c0]+mezzi corrispondono uno o più dei a, b, co 0, mentre [^a-c0]+sarebbe abbinare una o più di tutto ciò che non era a, b, co 0.


^((?!foo).)+$Trova qualsiasi riga che non contenga regex101.com/r/z6a65l/4
Levi Baguley

49

[^] (all'interno di [] ) è la negazione nell'espressione regolare mentre ^è "l'inizio di una stringa"

[^a-z] corrisponde a qualsiasi carattere singolo che non lo sia da "a" a "z"

^[a-z] significa che la stringa inizia con da "a" a "z"

Riferimento


9

^ utilizzato all'inizio di un intervallo di caratteri o asserzioni lookahead / lookbehind negative.

>>> 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>

Devi usare ?!negli ultimi 2 esempi o puoi usare solo !da solo? Cosa ci ?fa?
Fai clic su Upvote

Python ha bisogno ?di per dire che è un'estensione. Altri motori di regex possono avere le proprie regole.
Ignacio Vazquez-Abrams

@Clic: è piuttosto standard. regular-expressions.info/refadv.html , anche la maggior parte dei manuali dei motori regexp dicono la stessa cosa.
Amadan
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.