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.