Regex - Enthält keine bestimmten Zeichen

273

Ich brauche eine passende Regex, wenn irgendwo in einem Satz weder <oder> steht.

Wenn entweder <oder> in der Zeichenfolge enthalten ist, muss false zurückgegeben werden.

Ich hatte einen Teilerfolg damit, aber nur, wenn meine <> am Anfang oder Ende sind:

(?!<|>).*$

Ich benutze .Net, wenn das einen Unterschied macht.

Danke für die Hilfe.

SetiSeeker
quelle

Antworten:

435
^[^<>]+$

Das Caret in der Zeichenklasse ( [^) bedeutet, dass alles andere als übereinstimmt. Dies bedeutet also, dass der Anfang der Zeichenfolge, dann einer oder mehrere von allem außer <und >dann das Ende der Zeichenfolge.

Ned Batchelder
quelle
3
Was bedeutet das erste Caret? Würde dies nicht etwas bedeuten, das diese Zeichen nicht enthält ... also nur Zeichenfolgen, die diese Zeichen enthalten?
RobKohr
11
Das erste Caret bedeutet, Anfang der Saite. Der Dollar bedeutet Ende der Zeichenfolge.
Ned Batchelder
2
@PhilipRego Seien Sie vorsichtig mit Sonderzeichen: Die Shell interpretiert einige davon. Überprüfen Sie, ob sich jetzt eine Datei mit dem Namen '] + $' in Ihrem Verzeichnis befindet. Setzen Sie den gesamten regulären Ausdruck in einfache Anführungszeichen, damit er funktioniert.
Ned Batchelder
Gute Antwort! Können Sie eine Erklärung hinzufügen, warum es ein +und das erste Caret gibt?
Dr_Zaszuś
1
@ Dr_Zaszuś "+" bedeutet "eins oder mehrere" und "^" bedeutet "Anfang der Zeichenfolge".
Ned Batchelder
59

Bitte schön:

^[^<>]*$

Dies testet auf Zeichenfolgen, die no <und no haben>

Wenn Sie nach einer Zeichenfolge testen möchten, die möglicherweise <und hat >, aber auch etwas anderes haben muss, sollten Sie nur verwenden

[^<>] (or ^.*[^<>].*$)

Wo [<>]bedeutet eines von <oder> und [^<>]bedeutet etwas, das nicht von <oder ist> .

Und natürlich den obligatorischen Link .

Alin Purcaru
quelle