2017-08-17 4 views
-2

Ich habe die Zeichenfolge biz'baz. biz kann alles sein, so etwas wie bla'baz wäre in Ordnung; aber ich will, dass es bizbaz zurückgibt, wenn die Zeichenfolge bizbaz wird, und gibt nichts zurück, wenn baz von ' vorausgeht. Wie kann ich etwas mit dieser Logik machen? Brauche ich einen Lookahead? baz kann weitere Zeichen enthalten.Wie überprüft man, ob einem Wort ein Zeichen vorangestellt ist?

biz'baz würde keine Übereinstimmung zurückgeben.

bizbaz würde eine Übereinstimmung (bizbaz) zurückgeben.

bizbiz'baz würde keine Übereinstimmung zurückgeben.

hellohi'bazhello würde keine Übereinstimmung zurückgeben.

+0

Haben Sie etwas versucht? – anubhava

+0

Ja, aber meine Versuche sind völlig außerhalb des Kontexts, also glaube ich nicht, dass es nützlich war, das zu posten, was ich versucht habe. – WayneXMayersX

+0

Welchen Regex-Geschmack verwenden Sie? Können Sie ein klares Beispiel für die erwartete Eingabe/Ausgabe geben? –

Antwort

1

Sie suchen Charakter Negation:

/[^']baz/ 

Und wenn Sie den ganzen Satz übereinstimmen soll:

/.*[^']baz.*/ 

Check the live example.

0

Versuchen:

\Bbaz 

Die \B bedeutet "keine Wortgrenze".

Bei einer Wortgrenze haben Sie ein alphanumerisches Zeichen [A-Za-z0-9] oder einen Unterstrich (der aus historischen Gründen als Buchstabe gilt) und einen Buchstaben, der nicht zu diesen Dingen gehört. nebeneinander.

Also: biz'baz - keine Übereinstimmung: Es gibt eine "Wortgrenze" neben der b.

bizbaz - Übereinstimmung: Es gibt keine Wortgrenze durch die b.

bizbiz'baz - keine Übereinstimmung: Es gibt eine "Wortgrenze" neben der b.

hallohi'bazhello - keine Übereinstimmung: Es gibt eine "Wortgrenze" neben der b.

biz @ baz - keine Übereinstimmung: Es gibt eine "Wortgrenze" neben der b.

biz_baz - Übereinstimmung: Es gibt keine "Wortgrenze" neben dem b, weil ein Unterstrich ein Buchstabe ist, weil alberne Gründe.

Wenn die Unterstreichungs Angelegenheiten, dann können Sie explizit die Zeichen Liste Sie als Wortzeichen zählen, etwa so:

[a-zA-Z0-9]+baz 

, dass die gleichen, mit Ausnahme von zwei Dingen verhält.

1) Unterstriche werden nicht als Buchstaben behandelt.

2) Bei einem Spiel stimmt es mit dem ganzen Wort überein, nicht nur mit dem "baz" -Teil.

+0

Warum sollte ich 'biz @ baz' oder' biz baz' nicht zuordnen? – WayneXMayersX

+0

Ich verstehe die Frage nicht. Sie haben gefragt, dass das vorhergehende Zeichen ein Wortzeichen sein soll. @ ist kein Wortzeichen. –

+0

Aktualisiert meine Antwort zu klären. –

1

ein Look-Ahead ist eine gute Lösung.

Sie verwenden können:

/(?!^\p{L}*'\p{L}*(?:\s|$))(^\p{L}+)/ 

demo

In diesem Fall müssen Sie für die Look-Ahead in irgendeiner Form relevant Anker verwenden, Sinn zu machen. Sie können ^ für den Anfang der Zeile verwenden, aber ein Anker wird benötigt oder die Wortzeichen nach dem ' würden übereinstimmen.

Verwandte Themen