2010-12-02 8 views
5

Dies sollte einfach sein. Ich brauche einen regulären Ausdruck, der alles auswählt, was kein bestimmtes Wort enthält.REGEX: Wählen Sie alles ungleich einer bestimmten Zeichenfolge

Also wenn ich diesen Satz habe: "Es ist ein Wort in der Mitte dieses Satzes." Und der reguläre Ausdruck bekommt alles außer "Mitte", ich sollte alles in diesem Satz auswählen, aber "Mitte".

Gibt es eine einfache Möglichkeit, dies zu tun?

Danke.

+0

eh, einfach die Daten in eine Zeichenfolge var kopieren und eine Suche/ersetzen .... wahrscheinlich billiger als RE trotzdem. – Keng

+0

Kann dieses Wort mehr als einmal im Satz vorkommen? –

Antwort

2

Es ist nicht möglich, dass ein einzelner Regex-Match-Vorgang diskontinuierlich ist.

Sie könnten zwei einfangende Gruppen verwenden:

(.*)middle(.*)

dann die Inhalte der Erfassung Gruppen 1 und 2 nach dem Spiel verketten.

Möglicherweise möchten Sie die Option "Punkt entspricht auch Newline" in Ihrem Parser aktivieren.
Siehe zum Beispiel Java's DOTALL, .NET's Singleline, Perl's s usw.

+0

Wenn/Wenn Sie dies tun, stellen Sie sicher, dass Sie das '.' auch für Zeilenumbrüche aktivieren. – Keng

+0

@Keng guten Punkt. Bearbeitet das in. –

+0

Das garantiert nicht, dass keine Erfassungsgruppe '' middle'' enthält. Sollte es? – tchrist

1

Positive Lookarounds der Weg zu gehen ist:

/^(.+)(?=middle)/ -- gets everything before middle, not including middle 

und

/(?!middle)(.+)$/ -- gets everything after middle, not including middle 

Dann verschmelzen Sie nur die Ergebnisse der beiden

+0

Wenn/Wenn Sie dies tun, stellen Sie sicher, dass Sie das '.' auch mit Newline-Zeichen übereinstimmen. – Keng

Verwandte Themen