Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.

preg_replace: Nur zwischen 2 Tags ersetzen.

Ajax, Hijax, Microformats, RDF, Markup, HTML, PHP, CSS, MySQL, htaccess, robots.txt, CGI, Java, Javascript usw.
Neues Thema Antworten
wuschba
PostRank 8
PostRank 8
Beiträge: 655
Registriert: 16.06.2006, 16:37

Beitrag von wuschba » 07.02.2008, 17:02

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 ;-)

Anzeige von ABAKUS

von Anzeige von ABAKUS »

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

Jetzt anfragen: 0511 / 300325-0.


Graccem
PostRank 4
PostRank 4
Beiträge: 115
Registriert: 16.12.2004, 12:57
Wohnort: Berlin

Beitrag von Graccem » 07.02.2008, 17:26

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.

Southmedia
PostRank 10
PostRank 10
Beiträge: 7322
Registriert: 20.07.2003, 19:56

Beitrag von Southmedia » 07.02.2008, 17:38

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 ;)

CIX88
PostRank 3
PostRank 3
Beiträge: 90
Registriert: 11.05.2007, 11:45

Beitrag von CIX88 » 07.02.2008, 19:50

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 :)

wuschba
PostRank 8
PostRank 8
Beiträge: 655
Registriert: 16.06.2006, 16:37

Beitrag von wuschba » 11.02.2008, 09:01

Danke!

Antworten
  • Vergleichbare Themen
    Antworten
    Zugriffe
    Letzter Beitrag