2017-07-18 3 views
2

Ich möchte meine regex ?ver und ?v passen, aber nicht?versionRegex genauen Worte

Dies ist, was ich bisher: $parts = preg_split("(\b\?ver\b|\b\?v\b)", $src);

Ich denke, die Probleme sein könnte, wie ich die ? entkommen .

+0

Fügen Sie zwei oder drei Beispieleingänge hinzu, damit zukünftige SO-Leser sehen können, was Sie im Kontext fragen. – mickmackusa

+0

Was Sie "exakte Wörter" nennen, ist nicht sehr klar, insbesondere weil '?' Kein Wortcharakter ist. Sie sollten erklären, was genau ein Wort abgrenzt. –

+0

@mickmackusa: Es ist egal, es ist immer unklar (zum Glück!). –

Antwort

6

Ihr Muster versucht, eine ? zu finden, der ein Wort char vorangestellt ist, und da es keine gibt, haben Sie keine Übereinstimmung.

Verwenden Sie das folgende Muster:

'/\?v(?:er)?\b/' 

Siehe regex demo

Muster Details:

  • \? - eine wörtliche ? char
  • v(?:er)?-v oder ver
  • \b - eine Wortgrenze (d. H. Es muss ein Nicht-Wort-Zeichen (keine Ziffer, Buchstabe oder _) oder Ende der Zeichenfolge nach v oder ver) sein.

Hinweis Sie nicht über die erste (anfängliche) Wortgrenze müssen, wie es schon da ist, zwischen einem ? (einem nicht-Wort char) und v (ein Wort char). Sie würden dort eine Wortgrenze benötigen, wenn die ? optional wäre.

5

Probieren Sie das folgende Regex-Muster aus;

(\?v(?:\b|(?:er(?!sion)))) 

Demo

Dies wird ?ver und ?v, erlaubt aber einen negativen Vorgriff zu verhindern verwendet passende wenn ?ver von sion folgt, wie in Ihrem Fall ?version.

+0

Woher wissen Sie, dass der anvisierte Teilstring am Ende der Zeile endet? Ihr Muster könnte tatsächlich falsch sein, aber wir werden es nicht wissen, bis das OP einige Beispielzeichenfolgen bereitstellt. Das ist kein Problem für Wiktors korrektes Muster. – mickmackusa

+0

OP lieferte Beispielzeichenfolgen - er sagte: "Ich möchte, dass meine Regex" ver "und"? V ", aber nicht" version "entspricht. –

+0

Jedoch, auf die unglückliche Weise, dass das ist, was OP bedeutete, und sie artikulierten es nicht sehr gut, ich habe meine Antwort jetzt bearbeitet, wie es für die ursprüngliche Lösung kostenlos kommt. Danke, dass du das unterstrichen hast! :) –

Verwandte Themen