preg_replace

tomyv

Grünschnabel
Hallo,
ich setze beim Ausführen der Suchfunktion den Suchbegriff im gesamten HTML-Sourcecode in <mark>-Tags. Das mache ich mittels preg_replace mit folgendem command:
PHP:
$return = preg_replace("/($keyword)/i", "<mark>$0</mark>", $text);
Im vorliegenden Beispiel ist der Suchbegriff zB 'Jakarta' und der Begriff wurde nun auch innerhalb des <a>-Tags zwischen die <mark>-Tags gesetzt (rot), was unterbunden gehört.

Kann mir jemand sagen, wie ich Command erweitern muss, damit innerhalb der <a>-Tags keine <mark>-Tags gesetzt werden?
Besten Dank im voraus, Thomas
...
<p style='font-weight:bold; font-size: 14px; '>Padang - <mark>Jakarta</mark> Post 2: An der südwestlichen Küste Sumatras</p>
...
<a href='Padang-RI-<mark>Jakarta</mark>-2023-01-02.337.0.html'>Das-ist-der-Link</a>
...
 
Lösung
Allgemein und bei Regex lerne ich immer gern dazu. Die automatischen Erklärungen bei dem Regex-Tester sind jedoch beinahe so kryptisch wie die Regex selber. Bist Du vielleicht so freundlich, das ein wenig zu erklären.
Code:
(?:<[^>]*(*SKIP)|)(Jakarta)
  1. Annahme wie bei dir. überall innerhalb <..> soll nichts geändert werden, denn dort sind nur Attribute zu den Tags
  2. Positive Suchraster sind einfacher als Negative. In dem Fall: <[^>]*. < gefolgt von allem möglichen ausser >.
  3. (*SKIP) Ist mir auch neu und die Infos auf deutsch sind spärlich. Geht auch nur in wenigen Sprachen. Für PHP geht es.
    Ich glaube in etwa: wenn alles bis hierhin stimmt, dann skippe den kompletten Fund und suche erst nach dem kompletten...
Zurück