*, ?, +
les caractères signifient tous correspondent à ce caractère. Quel caractère signifie «ne correspond pas» à cela? Des exemples aideraient.
*, ?, +
les caractères signifient tous correspondent à ce caractère. Quel caractère signifie «ne correspond pas» à cela? Des exemples aideraient.
Réponses:
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 .
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
, c
ou 0
:[^a-c0]
Ce dernier: correspond à n'importe quelle chaîne de trois lettres sauf foo
et 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
, c
ou 0
, tout [^a-c0]+
correspondrait à un ou plusieurs de tout ce qui n'a pas été a
, b
, c
ou 0
.
^((?!foo).)+$
Correspond à n'importe quelle ligne ne contenant pas foo regex101.com/r/z6a65l/4
^
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>
?!
dans les 2 derniers exemples ou pouvez-vous simplement l'utiliser !
seul? Que fait ?
-il?
?
de pour dire que c'est une extension. D'autres moteurs de regex peuvent avoir leurs propres règles.