2016-06-20 7 views
-3

Wie kann ich überprüfen, ob der Text "abc" in einer Zeichenfolge aber nicht "abcd" existiert?Wie überprüft man, ob ein Teilstring in einem String existiert, wenn er durch ein Trennzeichen getrennt ist?

Zum Beispiel, wenn die Mail-Zeichenfolge "abcdef", "abcd, ef" oder etwas ähnliches ist, wobei "abc" Buchstaben auf jeder Seite hat, sollte es false zurückgeben. Etwas wie "abc", "abcdef" oder "abc, def" sollte jedoch wahr zurückgeben.

+0

Bitte denken Sie daran, eine Antwort zu einem bestimmten Zeitpunkt zu akzeptieren . Es wird Ihnen ein wenig extra Rep geben und diese Frage als beantwortet markieren. –

Antwort

2

Sie wollen \b verwenden:

\babc\b 

Dies wird nicht für so etwas wie athingabcisdef, abcdef oder aabcc passen, aber es wird an Wortgrenzen hello, abc! und abc,why?

\b Matches Match, Das bedeutet im Grunde "Übereinstimmung, wenn eines der Zeichen auf beiden Seiten ein Wortzeichen ist, und das andere nicht", obwohl es auch berücksichtigt, dass der Anfang und das Ende der Zeichenfolge keine Wortzeichen sind. Beachten Sie, dass \w_ enthält. Wenn Sie also Dinge wie a_abc_c abgleichen möchten, müssen Sie das in sich selbst hinzufügen.

Sie können einen Online-Test dieser Regex finden here („PCRE“ ist Perl reguläre Ausdrücke, die ist, was preg_match verwendet - die preg bedeutet p erl reg ular Ausdrücke)

+1

Die Wortgrenze '\ b' prüft bereits auf BOS/EOS. – sln

+0

@sln Wirklich? Ich hatte Probleme vorher, wo es nicht war und ich erwartete es, obwohl das in einer anderen Sprache war. Lass es sich testen und bearbeite die Antwort entsprechend. –

+1

Dies ist eine Wortgrenzendefinition '(?: (?:^| (? <= [^ A-zA-Z0-9 _])) (? = [A-zA-Z0-9 _]) | (? <= [a-zA-Z0-9 _]) (?: $ | (? = [^ a-zA-Z0-9 _]))) ' – sln