2016-04-13 8 views
1

finde ich foo in einem String von regex außer foo, die wie dieser alt = "foo" in Alt-Tag ist finden wollen; Zum Beispiel ist mein string:Wie besonderes Wort in Zeichenfolge von regex

This is an example foo and foo alt="foo" 

ich alle foo in dieser Zeichenfolge außer foo in diesem Teil finden will: alt="foo", so die Regex nur zwei foo finden sollte, die unter fett sind:

Dies ist ein Beispiel foo und foo alt = "foo"

+0

Finden Sie alle, die nicht zitiert werden, ist das, was Sie wollen? – dambros

+0

'(?! <") Foo (?! ")' – Maroun

+0

nein. Ich meine alle foo, die nicht so sind: alt = "foo" – Atefeh

Antwort

1

Wenn der alt= Teil immer nach den Worten, die Sie vergleichen wollen, können Sie es mit dieser Regex tun:

(?<!alt=")\b(\w+)\b(?=.*alt="\1") 

Ich benutze \b Wortgrenzen sicherzustellen, dass es nur ganze Wörter passt und nicht Teile Andere.

Sie können es in Aktion sehen here.

Wenn Sie Wörter nach dem alt=-Teil abgleichen möchten, wird es schwieriger, da lookbehind 0-width ist und daher Quantifizierer nicht verwenden können, um so weit wie nötig in der Zeichenfolge zu suchen.
In diesem Fall denke ich, die einfachste Lösung, die Suche in zwei Schritten zu machen ist:

  • erste (?<=alt=")[^"]+
  • dann suchen die Spiele mit (?<!alt=")\b$token\b die Token mit suchen, wo $token zuvor durch den Wert ersetzt werden sollte abgestimmt
+0

schlägt für ' Dies ist ein Beispiel foo und foo alt = "foo" foo und foo alt = "foo" ' – rock321987

+0

@ rock321987 danke, fügte ein negatives lookbehind hinzu, um das zu beheben – Aaron

Verwandte Themen