Regulären Ausdruck für die Wörter oder Ausdrücke im string aber NICHT überein, wenn Sie Teil einer URL oder innen - <a> </a> tags. (php)

Ich bin mir bewusst, dass die regex ist nicht ideal für die Verwendung mit HTML-Zeichenfolgen, und ich habe mir bei der PHP Simple HTML DOM-Parser, aber immer noch glauben, dass dies der Weg zu gehen. Alle HTML-tags werden generiert durch meine forum-software, so dass Sie konsistent und gültig HTML.

Was ich versuche zu machen, ist ein plugin, dass die Liste der Stichwörter (oder Wortgruppen) in ein HTML-string und ersetzen Sie Sie mit einem link, den ich angeben. Zum Beispiel, wenn jemand Typen:

I use Amazon for that.

es würde ersetzen Sie es mit:

I use <a href="http://www.amazon.com">Amazon</a> for that.

Das problem ist natürlich, dass, wenn "amazon" ist in der URL, es würde auch ersetzt zu bekommen. Ich löste das Problem mit einer callback-Funktion auf dieser Website leicht modifiziert.

Aber jetzt habe ich immer noch ein Problem haben, es noch ersetzt Wörter zwischen öffnenden und schließenden tags.

<a href="http://www.amazon.com">My Amazon Link</a>

Es wird mit dem "Amazon" in "Mein Amazon-Link"

Was ich wirklich brauche, ist ein regex-match sagen "amazon" überall, außer zwischen <a href und </a>

Irgendwelche Ideen?

  • eine Suche, diese Frage wurde bereits beantwortet millionenfach
  • fwiw habe ich die Suche und ich betrachtete jeden Vorschlag, den ich bekam, als ich in das Thema. Ich war wohl Phrasierung es schlecht, aber ich war auf der Suche für 2 Tage.
  • Nur ein follow-up. In Tests habe ich festgestellt, dass, wenn jemand hatte ein Bild-tag <img> ein amazon-Quelle würde es auch versuchen, zu konvertieren, das Wort innerhalb der <img> tag, um einen link als gut. Ich veränderte die regex zu ignorieren <img> tags (auch XHTML image-tags, in der Tat, alle XHTML-tags): (?![^<]*</a>|" />))
InformationsquelleAutor Joe D. | 2011-05-15
Schreibe einen Kommentar