Ich brauche eine Regex, die in der Lage ist, alles außer einer Zeichenfolge abzugleichen, die mit einem bestimmten Muster beginnt (speziell index.php
und wie folgt index.php?id=2342343
).
Ich brauche eine Regex, die in der Lage ist, alles außer einer Zeichenfolge abzugleichen, die mit einem bestimmten Muster beginnt (speziell index.php
und wie folgt index.php?id=2342343
).
Antworten:
Kein Regexp-Experte, aber ich denke, Sie könnten von Anfang an einen negativen Lookahead verwenden, z. B. ^(?!foo).*$
sollte nichts mit dem übereinstimmen foo
.
^((?!foo).)*$
( stackoverflow.com/a/406408/3964381 )
Regex: alles zusammenpassen, aber :
foo
):
world.
am Ende):
foo
) (kein POSIX-kompatibles Muster, sorry):
|
Symbol abzugleichen):
foo
):
cat
): /cat(*SKIP)(*FAIL)|[^c]*(?:c(?!at)[^c]*)*/i
oder/cat(*SKIP)(*FAIL)|(?:(?!cat).)+/is
(cat)|[^c]*(?:c(?!at)[^c]*)*
(oder (?s)(cat)|(?:(?!cat).)*
, oder (cat)|[^c]+(?:c(?!at)[^c]*)*|(?:c(?!at)[^c]*)+[^c]*
) und dann mit der Sprache prüfen, bedeuten: Wenn Gruppe 1 übereinstimmt, ist dies nicht das, was wir benötigen. Andernfalls greifen Sie auf den Übereinstimmungswert zu, wenn er nicht leer ist[^a-z]+
(ein anderes Zeichen als ein ASCII-Kleinbuchstabe)|
:[^|]+
Demo-Hinweis : Die neue Zeile \n
wird in negierten Zeichenklassen in Demos verwendet, um einen Überlauf der Übereinstimmungen mit den benachbarten Zeilen zu vermeiden. Sie sind beim Testen einzelner Zeichenfolgen nicht erforderlich.
Ankerhinweis : Verwenden Sie in vielen Sprachen \A
den eindeutigen Anfang der Zeichenfolge und \z
(in Python ist es \Z
in JavaScript $
OK), um das Ende der Zeichenfolge zu definieren.
Punktnotiz : In vielen Geschmacksrichtungen (aber nicht POSIX, TRE, TCL) .
passt jedes Zeichen außer einem Zeilenumbruchzeichen . Stellen Sie sicher, dass Sie einen entsprechenden DOTALL-Modifikator ( /s
in PCRE / Boost / .NET / Python / Java und /m
in Ruby) verwenden .
, damit alle Zeichen einschließlich eines Zeilenumbruchs übereinstimmen.
Backslash Anmerkung : In Sprachen , in denen Sie Muster mit C - Strings deklarieren müssen damit Escape - Sequenzen (wie \n
für eine neue Zeile), müssen Sie die Schrägstriche zu entkommen Sonderzeichen so verdoppeln , dass der Motor sich als normale Zeichen behandeln könnte (zB in Java, world\.
wird deklariert als "world\\."
oder eine Zeichenklasse verwenden :) "world[.]"
. Verwenden Sie rohe String-Literale (Python r'\bworld\b'
), wörtliche C # @"world\."
-String- Literale oder Slash-Strings / Regex-Literal-Notationen wie /world\./
.
^(?!foo$)
, warum muss das Dollarzeichen in Klammern stehen, damit der Ausdruck funktioniert? Ich hatte erwartet ^(?!foo)$
, die gleichen Ergebnisse zu erzielen, aber das tut es nicht.
$
Anker innerhalb des Lookaheads befindet, ist er Teil der Bedingung, Teil dieser Behauptung mit der Breite Null . Wenn es außerhalb wie in wäre ^(?!foo)$
, wäre es Teil des konsumierenden Musters, das das Ende der Zeichenfolge direkt nach dem Beginn der Zeichenfolge erfordert, wodurch der negative Lookahead irrelevant wird, da er immer true zurückgeben würde (nach dem Ende der Zeichenfolge darf kein Text mehr vorhanden sein) geschweige denn foo
). Entspricht also dem ^(?!foo$)
Anfang einer Zeichenfolge, auf die nicht folgt foo
, und dem Zeichenfolgenende. ^(?!foo)$
stimmt mit einer leeren Zeichenfolge überein.
cot
oder lan
finden und die Übereinstimmung entfernen, wie z regex.replace(myString, "^.*?(?:cot|lan)\s*", "")
.
Sie können ein ^
am Anfang eines Zeichensatzes einfügen, damit alles andere als diese Zeichen übereinstimmen.
[^=]*
wird alles passen aber =
Einfach übereinstimmen, /^index\.php/
dann ablehnen, was auch immer passt.
str !~ /\Aindex\.php/
.
Ich brauche eine Regex Lage, alles paßt aber ausnehmen eine Zeichenfolge , beginnend mit
index.php
einem bestimmten Muster (insbesondere index.php und was folgt, wie index.php? Id = 2342343)
Verwenden Sie die Methode 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]);
ODER ANDERES SPIEL
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);
Wie wäre es, wenn Sie keinen regulären Ausdruck verwenden:
// In PHP
0 !== strpos($string, 'index.php')
grep
die Befehlszeile oder Perl / Python / eine andere Sprache oder den Befehl "Diesen