2016-04-01 5 views
0

Ich versuche herauszufinden, wie man eine Regex schreibt, die einem Muster entspricht, aber nur, wenn es nicht Teil eines größeren Musters ist, an dem ich nicht interessiert bin Beispiel, würde ich einen regulären Ausdruck wie das alles mit „foo“ mit Ausnahme von „foobar“ entsprechen wirdRegex passt nur zu einem Muster, wenn es kein Teil eines größeren Musters ist

So sollte es passen „foobaz“ oder „fooqux“, aber nicht „foobar“

Dank!

+2

Das kann nicht sein, was Sie Ich suche immer, aber ich entferne immer nur diejenigen, die ich nicht in einem zweiten Durchgang möchte. 'grep foo | grep -v foobar'. –

+0

Sie könnten etwas wie 'foo [^ b] [^ a] [^ r] versuchen, aber es wird nicht ganz richtig funktionieren. –

Antwort

3

können Sie eine negative Vorschau hier verwenden, um ein Wort mit foo beginnen zu passen, aber nicht foobar:

\bfoo(?!bar)\S* 

RegEx Demo

Breakup:

\b  # word boundary 
foo  # match literal text foo 
(?!bar) # negative lookahead to fail the match if we have bar ahead 
\S*  # match 0 or more non-space characters 
+1

Sehr cool. Vielen Dank! – Jacob

+0

Gut zu wissen, dass es funktioniert hat [Sie können die Antwort als akzeptiert markieren, indem Sie auf ** Häkchen ** oben links in dieser Antwort klicken] (http://meta.stackexchange.com/a/5235/160242) – anubhava