Seite 1 von 1

preg_replace: Nur zwischen 2 Tags ersetzen.

Verfasst: 07.02.2008, 17:02
von wuschba
Hi! Stehe gerade bezüglich preg_replace etwas auf dem Schlauch:
Ich möchte gerne in einem HTML-Code alle Leerzeichen durch Komma ersetzen, jedoch nur, wenn der Text in <b>-Tags eingefasst ist:

Dies ist mein Text, und <b>dies hier ist fett</b> - toll nicht?

Soll ergeben:
Dies ist mein Text, und <b>dies,hier,ist,fett</b> - toll nicht?

Wenn ich sowas absetze:
$txt = preg_replace("/<b>(.*)([ ])(.*)\"</b>/sU", "<b>\"$1,$3\">", $txt);
wird natürlich immer nur das ERSTE Leerzeichen ersetzt, und nicht ALLE:
Dies ist mein Text, und <b>dies, hier ist fett</b> - toll nicht?

Wie kriege ich es hin, dass alle ersetzt weden? Ich kann die Abfrage oben natürlich 1000x ausführen, aber das erscheint mir etwas Overkill ;-)

Verfasst:
von
SEO Consulting bei ABAKUS Internet Marketing
Erfahrung seit 2002
  • persönliche Betreuung
  • individuelle Beratung
  • kompetente Umsetzung

Jetzt anfragen: 0511 / 300325-0.


Verfasst: 07.02.2008, 17:26
von Graccem
Ich würde das eher so machen:
1. preg_match(_all) den Part im String suchen und die Treffer in einer Variable speichern (in Variable ist dann Original + Suche gespeichert)
2. str_replace auf die Treffer anwenden
3. Mit str_replace den neuen String-Part in den alten Einsetzen.

Code: Alles auswählen

echo $string='Dies ist mein Text, und <b>dies hier ist fett</b> - toll nicht? und <b>noch mehr fett</b>';
echo '<br />';
preg_match_all&#40;"/<b>&#40;.*&#41;<\/b>/sU", $string,$pattern&#41;;

foreach &#40;$pattern&#91;1&#93; as $key=>$value&#41; &#123;
	$new='<b>'.str_replace&#40;' ',',',$value&#41;.'</b>';
	$string=str_replace&#40;$pattern&#91;0&#93;&#91;$key&#93;,$new,$string&#41;;
&#125;


echo $string;

Das wird dann nur so oft getätigt, wie b-Tags im String vorkommen.

Verfasst: 07.02.2008, 17:38
von Southmedia
Jap, so in die Richtung würd ich es auch eher tun. Hat vor allem den Vorteil dass du es auch noch in 2 Wochen verstehen wirst - im Gegensatz zu dem Regex den du dir dafür bauen könntest ;)

Verfasst: 07.02.2008, 19:50
von CIX88
Ich würde mit preg_replace_callback() arbeiten.
Damit lassen sich alle gefundenen Einträge extra bearbeiten.
preg_replace() und Modifer e machen es auch zur Not.
Es gibt eben viele Wege :)

Verfasst: 11.02.2008, 09:01
von wuschba
Danke!