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
).
Réponses
Trop de publicités?Regex : tout correspond mais :
- a chaîne de caractères en commençant par un motif spécifique (par exemple, n'importe quelle - vide, aussi - chaîne ne commençant pas par
foo
):- Solution basée sur le Lookahead pour les NFAs :
- Solution basée sur la classe de caractère négative pour les moteurs de regex ne supportant pas les lookarounds :
- a chaîne de caractères se terminant par un motif spécifique (dis, non
world.
à la fin) :- Solution basée sur le lookbehind :
- Solution anticipée :
- Solution de contournement POSIX :
- a chaîne de caractères contenant texte spécifique (disons, ne pas faire correspondre une chaîne ayant
foo
):- Solution basée sur l'observation :
- Solution de contournement POSIX :
- Utilisez le générateur de regex en ligne à l'adresse www.formauri.es/personal/pgimeno/misc/non-match-regex
- a chaîne de caractères contenant spécifique caractère (par exemple, éviter de faire correspondre une chaîne ayant un
|
symbole) : - a chaîne de caractères égal à une chaîne (disons, pas égal à
foo
):- Basé sur la recherche :
- POSIX :
- a séquence de caractères :
-
PCRE (correspond à tout texte sauf
cat
):/cat(*SKIP)(*FAIL)|[^c]*(?:c(?!at)[^c]*)*/i
o/cat(*SKIP)(*FAIL)|(?:(?!cat).)+/is
- D'autres moteurs permettent de faire des recherches :
(cat)|[^c]*(?:c(?!at)[^c]*)*
(ou(?s)(cat)|(?:(?!cat).)*
ou(cat)|[^c]+(?:c(?!at)[^c]*)*|(?:c(?!at)[^c]*)+[^c]*
) et ensuite vérifier avec des moyens linguistiques : si le groupe 1 correspond, ce n'est pas ce dont nous avons besoin, sinon, récupérer la valeur de correspondance si elle n'est pas vide.
-
PCRE (correspond à tout texte sauf
- a un caractère unique ou un ensemble de caractères :
- Utilisez un classe de caractères négationnistes :
[^a-z]+
(tout caractère autre qu'une lettre ASCII minuscule) - Correspondant à un ou plusieurs caractères mais
|
:[^|]+
- Utilisez un classe de caractères négationnistes :
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\./
.
- Réponses précédentes
- Plus de réponses