Quel opérateur d'expression régulière signifie "Ne correspond pas" à ce caractère?


89

*, ?, +les caractères signifient tous correspondent à ce caractère. Quel caractère signifie «ne correspond pas» à cela? Des exemples aideraient.


Pour une solution concernant le fait de ne pas correspondre à un mot - Voir ici stackoverflow.com/questions/406230
null

Réponses:


88

Vous pouvez utiliser des classes de caractères négatives pour exclure certains caractères: par exemple [^abcde], correspondra à tout sauf aux caractères a, b, c, d, e.

Au lieu de spécifier tous les caractères littéralement, vous pouvez utiliser des raccourcis à l' intérieur des classes de caractères: [\w](minuscules) correspondra à n'importe quel «caractère de mot» (lettre, chiffres et trait de soulignement), [\W](majuscule) correspondra à tout sauf aux caractères de mot; de même, [\d]correspondra aux chiffres 0-9 tandis que [\D]correspondra à tout sauf aux chiffres 0-9, et ainsi de suite.

Si vous utilisez PHP, vous pouvez consulter la documentation des classes de caractères regex .


80

Il y a deux façons de dire «ne correspondent pas»: des plages de caractères et une avant / arrière négative de largeur zéro.

L'ancien: ne correspondent pas a, b, cou 0:[^a-c0]

Ce dernier: correspond à n'importe quelle chaîne de trois lettres sauf fooet bar:

(?!foo|bar).{3}

ou

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

En outre, une correction pour vous: *, ?et +ne correspond pas à quoi que ce soit. Ce sont des opérateurs de répétition et suivent toujours un opérateur correspondant. Ainsi, des a+moyens correspondent à un ou plusieurs a, des [a-c0]+moyens correspondent à un ou plusieurs a, b, cou 0, tout [^a-c0]+correspondrait à un ou plusieurs de tout ce qui n'a pas été a, b, cou 0.


^((?!foo).)+$Correspond à n'importe quelle ligne ne contenant pas foo regex101.com/r/z6a65l/4
Levi Baguley

48

[^] (entre [] ) est la négation dans une expression régulière alors que ^est "début de chaîne"

[^a-z] correspond à tout caractère unique qui ne va pas de "a" à "z"

^[a-z] signifie que la chaîne commence par "a" à "z"

Référence


8

^ utilisé au début d'une plage de caractères, ou assertions lookahead / lookbehind négatifs.

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

Devez-vous utiliser ?!dans les 2 derniers exemples ou pouvez-vous simplement l'utiliser !seul? Que fait ?-il?
Cliquez sur Upvote

Python a besoin ?de pour dire que c'est une extension. D'autres moteurs de regex peuvent avoir leurs propres règles.
Ignacio Vazquez-Abrams

@Click: C'est assez standard. regular-expressions.info/refadv.html , la plupart des manuels des moteurs d'expression régulière disent la même chose.
Amadan
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.