Regex Problem: [ ] Ignorieren

Iches

Erfahrenes Mitglied
Hallo

Wie kann ich es hinbekommen, dass der ganze Text drum herum ersetzt wird ,außer der Text der in [ ] steht?

Also wenn ich

blahh [bla]gdgd[/bla] bla

habe, dann soll nur das bla ersetzt werden, dass nicht in den Klammern steht.

PHP:
<?php
$foo = preg_replace("/$array_1/isU", "<span class='mark'>$0</span>", $foo);
?>

Vielen Dank schon mal im Vorraus.
 
Du könntest alles in einen span-Tag setzen und dann den „bla“-Block wieder herausnehmen, indem du vor dem Block ein schließende Tag und nach dem Block ein öffnendes Tag setzt. Du könntest aber auch einen regulären Ausdruck nehmen, der sowohl den Teil vor dem Block, den Block selbst und den Teil nach dem Block trifft und in der Ersetzung die Tags entsprechend setzen.
 
Wofür ist denn der Quellcode in deinem Eingangsbeitrag? Dann erkläre doch noch einmal ausführlich, was genau du vorhast zu realisieren.
 
Naja eigentlich hätte ich mir den Quellcode sparen können.

Also das ganze soll eine Suche sein, nach einen bestimmten String nachdem der Benutzer gesucht hat, wenn dieser gefunden wird, wird er markiert. Das Problem ist, wenn man jetzt z.B. Url hat, diese werden dann auch verändert sodass sie markiert werden. Somit sind die URL unbrauchbar. Das genau das gleiche Spiel wie mit dem BBCode, weil wenn in der Klammer Beispiel [ IMG ] das IMG markiert wird, wird dieser nicht mehr interpretiert, und es wird kein Bild angezeigt. Ich hoffe ich habe mich verständlich ausgedrückt.
 
Hallo,

folgender Ausdruck könnte hier nützlich sein:
Code:
(?<=\G|])([^[]*?)([ i]suchwort[ /i])

In PHP:
PHP:
$str = preg_replace("/(?<=\G|])([^[]*?)($array_1)/i", '\1<span class="mark">\2</span>', $str);

Sinnvoller wäre es aber vielleicht, zunächst die Umwandlung BBCode -> HTML und anschließend die Suchwortmarkierung entsprechend unter Ausschluss von Inhalten innerhalb von HTML-Tags vorzunehmen.

Grüße,
Matthias
 
Zurück