2016-05-29 7 views
1

Ich versuche bestimmte Zeilen zu finden, in denen "like" vor dem Wort "crusegdf" steht. Um zum Beispiel die folgende Eingabe gegeben:regex, meide eine Zeile, wenn ein Wort darin vorkommt

def shared temp-table w-cruseg no-undo field cruise-id like crusegdf.segment-id 
define {1} shared temp-table tt-history no-undo like crusegdf. 

Ich möchte nur die zweite Zeile entsprechen. Aber meine Regex findet diese beiden Zeilen. Die Regex, die ich jetzt verwenden ist:

(?i)(define|def)(.*?)(temp-table)(.*?)(like)\s*(\bcrusegdf\b)\s*(\.) 
+0

* Negativer Lookbehind *? –

+1

Welche Programmiersprache benutzen Sie? –

+0

Ich bin nicht sicher, ob eine Regex die beste Möglichkeit ist, diese Daten zu analysieren, wenn Sie ein "Feld" mit einem Wert von "wie" und ein "wie" mit einem Wert von "Feld" haben könnten. –

Antwort

1

Sie nicht \b verwenden können, um Feldnamen zu begrenzen, weil Sie Ihre Eingabe Feldnamen hat, die Punkte enthalten; Der Punkt ist kein "Wort" -Zeichen.

Verwenden Sie stattdessen einen negativen Vorgriff für einen Punkt dann mehr Feldnamen:

^(?i)(define|def).*?temp-table.*?like\s*\bcrusegdf\b(?!\.\w).*$ 

live demo See.

Ich habe auch die unnötigen Klammern entfernt (Ihre Frage hat nicht gesagt, dass Sie Eingaben erfassen müssen).

+0

Danke für Ihre Hilfe. Eigentlich möchte ich es so, wie ich es erwähnt habe. Es ist ein spezieller Fall, und ich habe nicht alle Bedingungen erwähnt, da es eine Menge gibt. Ich muss beide Fälle mit zwei verschiedenen Regex finden. Eines mit "Feld" in der Zeile und das andere ohne "Feld" in der Zeile. Alle anderen Klammern sind auch erforderlich, da ich diese festhalte. – user1877031

0

können Sie diese negative Look-Ahead-regex verwenden für eine passende wie like enthält, die nicht define bevor es enthält:

^(?:(?!\bfield\b).)*like.* 

RegEx Demo

(?:(?!\bfield\b).)* wird 0 entsprechen oder mehr Zeichen, die nicht haben field an der nächsten Position.

+0

Ich muss auch sicherstellen, dass das Wort "Temp-Tabelle" in der Zeile ist. Wie kann ich das tun? – user1877031

+0

In diesem Fall verwende: '^ (? =. * Temp-Tabelle) (?: (?! \ Bfield \ b).) * Like. *' – anubhava