530 votes

Regex : correspond à tout sauf à un motif spécifique

J'ai besoin d'une expression régulière capable de correspondre à tout mais une chaîne de caractères commençant par un motif spécifique (spécifiquement index.php et ce qui suit, comme index.php?id=2342343 ).

625voto

Wiktor Stribiżew Points 100073

Regex : tout correspond mais :

Note de démo : le saut de ligne \n est utilisé à l'intérieur des classes de caractères négatives dans les démos pour éviter le débordement de la correspondance sur la ou les lignes voisines. Ils ne sont pas nécessaires pour tester des chaînes de caractères individuelles.

Note d'ancrage : Dans de nombreuses langues, l'utilisation \A pour définir le début non ambigu de la chaîne de caractères, et \z (en Python, c'est \Z en JavaScript, $ est OK) pour définir la toute fin de la chaîne.

Point note : Dans de nombreuses variantes (mais pas POSIX, TRE, TCL), . correspond à tout caractère mais une nouvelle ligne char. Veillez à utiliser un modificateur DOTALL correspondant ( /s dans PCRE/Boost/.NET/Python/Java et /m en Ruby) pour le . pour correspondre à n'importe quel caractère, y compris une nouvelle ligne.

Note sur la barre oblique inversée : Dans les langages où vous devez déclarer des motifs avec des chaînes C permettant des séquences d'échappement (comme \n pour une nouvelle ligne), vous devez doubler les barres obliques inverses qui échappent aux caractères spéciaux afin que le moteur puisse les traiter comme des caractères littéraux (par exemple, en Java, world\. sera déclaré comme "world\\." ou utiliser une classe de caractères : "world[.]" ). Utilisez des chaînes littérales brutes (Python r'\bworld\b' ), les littéraux de chaîne verbatim de C# @"world\." ou des notations littérales de chaînes de caractères et d'expressions rationnelles telles que /world\./ .

368voto

Cat Plus Plus Points 53385

Vous pourriez utiliser un lookahead négatif dès le départ, par exemple, ^(?!foo).*$ ne devrait pas correspondre à quelque chose commençant par foo .

340voto

Firsh Points 187

Vous pouvez mettre un ^ au début d'un jeu de caractères pour correspondre à tout sauf à ces caractères.

[^=]*

correspondra à tout sauf =

3voto

Juste une correspondance /^index\.php/ et de rejeter tout ce qui y correspond.

3voto

AJ. Points 12912

Sur Python :

>>> import re
>>> p='^(?!index\.php\?[0-9]+).*$'
>>> s1='index.php?12345'
>>> re.match(p,s1)
>>> s2='index.html?12345'
>>> re.match(p,s2)
<_sre.SRE_Match object at 0xb7d65fa8>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X