Regex für String enthält?

112

Was ist der reguläre Ausdruck, um einfach zu überprüfen, ob eine Zeichenfolge ein bestimmtes Wort enthält (z. B. 'Test')? Ich habe ein bisschen gegoogelt, kann aber kein klares Beispiel für eine solche Regex finden. Dies ist für ein Build-Skript gedacht, hat jedoch keinen Einfluss auf eine bestimmte Programmiersprache.

GurdeepS
quelle

Antworten:

77

Unter der Annahme regulärer Regex-Aromen im PCRE-Stil:

Wenn Sie es als überprüfen mögen einzelnes, vollständiges Wort , dann ist es \bTest\b, mit entsprechenden Flags für Unempfindlichkeit Fall , wenn gewünscht und Trennzeichen für Ihre Programmiersprache. \bstellt eine "Wortgrenze" dar, dh einen Punkt zwischen Zeichen, an dem ein Wort als Anfang oder Ende betrachtet werden kann. Da beispielsweise Leerzeichen zum Trennen von Wörtern verwendet werden, gibt es auf beiden Seiten eines Leerzeichens eine Wortgrenze.

Wenn Sie es als Teil des Wortes überprüfen möchten , ist es nur Testwieder mit entsprechenden Flags für Groß- und Kleinschreibung. Beachten Sie, dass dedizierte "Teilstring" -Methoden in diesem Fall normalerweise schneller sind, da der Aufwand für das Parsen des regulären Ausdrucks entfällt.

Michael Madsen
quelle
1
" \bstellt eine" Wortgrenze "dar, dh etwas, das zwei Wörter trennt (z. B. ein Leerzeichen)." \bpasst nicht zu einem Leerzeichen; Es ist eine Behauptung, die zwischen Zeichen übereinstimmt (oder in den meisten Fällen am Anfang oder Ende einer Zeile).
Strager
1
@strager: Ja, du hast recht - meine Erklärung war etwas ungenau. Ich werde bearbeiten.
Michael Madsen
115

Verankere dein Muster nur nicht:

/Test/

Der obige reguläre Ausdruck prüft, ob die Literalzeichenfolge "Test" irgendwo darin gefunden wird.

Platinum Azure
quelle
2
Danke, ich wusste nicht, dass es so einfach ist! Ich habe das definitiv nicht in meinem Googeln gesehen. Was meinst du damit, mein Muster nicht zu verankern?
GurdeepS
7
Sie können ein Muster so verankern, dass es mit dem Anfang oder Ende eines Strings übereinstimmt, z. B. / ^ Test / oder / Test $ / oder sogar / ^ Test $ /, um genau übereinzustimmen. Das Beispiel ist fehlerhaft, da es keinen Vorteil gegenüber dem Vergleich auf Gleichheit bietet. Wenn Sie jedoch beispielsweise eine Formularfeldvalidierung durchführen, stimmt ein regulärer Ausdruck wie / ^ \ d + $ / nur überein, wenn das Feld mindestens eine Ziffer und nur numerische Ziffern enthält.
David Clarke
-13

Ich bin ein paar Jahre zu spät, aber warum nicht?

[Tt][Ee][Ss][Tt]
user2747691
quelle
4
Diese Antwort wurde in der Warteschlange für Überprüfungen von geringer Qualität angezeigt, vermutlich weil Sie den Code nicht erklärt haben. Wenn Sie es erklären (in Ihrer Antwort), erhalten Sie mit größerer Wahrscheinlichkeit mehr positive Stimmen - und der Fragesteller lernt tatsächlich etwas!
Der Kerl mit dem Hut
6
Dies ist nicht sehr verallgemeinerbar - stellen Sie sich vor, das Wort, nach dem Sie suchen mussten, stammt von einem Benutzer. Sie müssten das [Aa]Muster für jeden Buchstaben generieren und es würde ziemlich schnell ziemlich hässlich werden.
Platinum Azure