J'ai besoin d'une expression régulière capable de tout faire correspondre, sauf une chaîne commençant par un modèle spécifique (spécifiquement index.php
et ce qui suit, comme index.php?id=2342343
)
J'ai besoin d'une expression régulière capable de tout faire correspondre, sauf une chaîne commençant par un modèle spécifique (spécifiquement index.php
et ce qui suit, comme index.php?id=2342343
)
Réponses:
Pas un expert en regexp, mais je pense que vous pouvez utiliser un lookahead négatif dès le début, par exemple ^(?!foo).*$
ne devrait pas correspondre à quoi que ce soit commençant par foo
.
^((?!foo).)*$
( stackoverflow.com/a/406408/3964381 )
Regex: correspond à tout, mais :
foo
):
world.
à la fin):
foo
) (pas de patern conforme POSIX, désolé):
|
symbole):
foo
):
cat
): /cat(*SKIP)(*FAIL)|[^c]*(?:c(?!at)[^c]*)*/i
ou/cat(*SKIP)(*FAIL)|(?:(?!cat).)+/is
(cat)|[^c]*(?:c(?!at)[^c]*)*
(ou (?s)(cat)|(?:(?!cat).)*
, ou (cat)|[^c]+(?:c(?!at)[^c]*)*|(?:c(?!at)[^c]*)+[^c]*
) et ensuite vérifier avec la langue signifie: si le groupe 1 correspond, ce n'est pas ce dont nous avons besoin, sinon, saisissez la valeur de correspondance sinon vide[^a-z]+
(tout caractère autre qu'une lettre ASCII minuscule)|
:[^|]+
Remarque sur la démo : la nouvelle ligne \n
est utilisée à l'intérieur des classes de caractères annulées dans les démos pour éviter un débordement de correspondance avec la ou les lignes voisines. Ils ne sont pas nécessaires lors du test de chaînes individuelles.
Note d'ancrage : dans de nombreuses langues, utilisez \A
pour définir le début de la chaîne sans ambiguïté et \z
(en Python, c'est \Z
, en JavaScript, $
c'est OK) pour définir la fin de la chaîne.
Remarque : dans de nombreuses versions (mais pas POSIX, TRE, TCL), .
correspond à n'importe quel caractère, à l'exception d' un caractère de nouvelle ligne . Assurez-vous d'utiliser un modificateur DOTALL correspondant ( /s
dans PCRE / Boost / .NET / Python / Java et /m
dans Ruby) pour .
correspondre à n'importe quel caractère, y compris une nouvelle ligne.
Remarque\n
sur les barres obliques inverses : dans les langues où vous devez déclarer des modèles avec des chaînes C permettant des séquences d'échappement (comme 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é en tant que "world\\."
, ou utilisez une classe de caractères:) "world[.]"
. Utilisez des littéraux de chaîne bruts (Python r'\bworld\b'
), des littéraux de chaîne verbatim C # @"world\."
ou des notations littérales de chaînes slashy / regex comme /world\./
.
^(?!foo$)
, pourquoi le signe dollar doit-il être entre parenthèses pour que l'expression fonctionne? Je m'attendais ^(?!foo)$
à donner les mêmes résultats, mais ce n'est pas le cas.
$
ancre est à l'intérieur de l'antichambre, elle fait partie de la condition, de cette assertion de largeur nulle . S'il était à l'extérieur, comme dans ^(?!foo)$
, il fera partie du modèle de consommation nécessitant la fin de la chaîne juste après le début de la chaîne, ce qui rendrait l'anticipation négative non pertinente car elle retournerait toujours vrai (il ne peut y avoir de texte après la fin de la chaîne , encore moins foo
). Ainsi, ^(?!foo$)
correspond au début d'une chaîne qui n'est pas suivie par foo
celle qui est suivie par la fin de la chaîne. ^(?!foo)$
correspond à une chaîne vide.
cot
or lan
, et supprimer la correspondance, comme regex.replace(myString, "^.*?(?:cot|lan)\s*", "")
.
Vous pouvez mettre un ^
au début d'un jeu de caractères pour correspondre à tout sauf à ces caractères.
[^=]*
correspondra à tout, mais =
Faites simplement correspondre /^index\.php/
puis rejetez ce qui correspond.
str !~ /\Aindex\.php/
.
Je besoin d' un regex capable de correspondre à tout , mais excepter une chaîne commençant par
index.php
un motif spécifique ( en particulier index.php et ce qui suit, comme index.php? Id = 2342343)
Utiliser la méthode Exec
let match,
arr = [],
myRe = /([\s\S]+?)(?:index\.php\?id.+)/g;
var str = 'http://regular-viragenia/index.php?id=2342343';
while ((match = myRe.exec(str)) != null) {
arr.push(match[1]);
}
console.log(arr);
var myRe = /([\s\S]+?)(?:index\.php\?id=.+)/g;
var str = 'http://regular-viragenia/index.php?id=2342343';
var matches_array = myRe.exec(str);
console.log(matches_array[1]);
OU AUTRE MATCH
let match,
arr = [],
myRe = /index.php\?id=((?:(?!index)[\s\S])*)/g;
var str = 'http://regular-viragenia/index.php?id=2342343index.php?id=111index.php?id=222';
while ((match = myRe.exec(str)) != null) {
arr.push(match[1]);
}
console.log(arr);
Que diriez-vous de ne pas utiliser regex:
// In PHP
0 !== strpos($string, 'index.php')
grep
sur la ligne de commande, par exemple, ou Perl / Python / tout autre langage, ou une commande "Exécuter cette expression régulière pour chaque ligne" dans un éditeur de texte, etc ...)