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.

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.


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 .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.