Zur Navigation

wordwrap() innerhalb preg_replace

1 Jürgen.bcx

Moin!
Ich habe per preg_replace mir schöne links gebastelt. Nun wollte ich, dass der Part im href-Attribut zwischen den <a></a>-Tags erscheint. Diesen wollte ich per wordwrap() umbrechen, und zwar so:

preg_replace($url,"<a target=\"_blank\" href=\"$2\">".wordwrap("$5",40," ",1)."</a>",$text);

Nur leider wird es ignoriert, als ob nicht auf die Backreference zugegriffen werden kann. Geht es überhaupt nicht oder ist mein Ansatz falsch?

Grüße

02.10.2009 16:15 | geändert: 02.10.2009 16:31

2 Jörg Kruse

Wie schaut $url denn aus - d.h. worauf beziehen sich $2 und $5?

Eventuell funktioniert der Ersetzungsausdruck folgendermaßen:

"'<a target=\"_blank\" href=\"$2\">' . wordwrap('$5',40,' ',1) . '</a>'"

02.10.2009 16:33

3 Jürgen.bcx

Hallo Jörg,
$url ist

$url = "/(\[link=)(((http|https|ftp|ftps):\/\/)(([a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4}))|(([0-9]{1,3}\.){3}([0-9]{1,3})))((\/|\?)?[a-zA-Z0-9~#%&'_\+\/=:\?\.,-]*))(\])/i";

$2 bezieht sich auf den gesamten Link, $5 nur auf die Domains, aus einem Link wie

https://joergs-forum.de/wordwrap-innerhalb-preg-replace-t-3463-1#p1

wird so einfach nur "forum.joergkrusesweb.de" (zwischen den <a>-Tags)

Ich habe deine Lösung versucht und auch nocheinmal mit den Quotes rumgespielt, alles ohne Erfolg. Mir scheint, wordwrap() kann mit der Referenz von preg_replace() nichts anfangen, kennt sie gar nicht?

04.10.2009 15:22 | geändert: 04.10.2009 15:23

4 Jörg Kruse

Hier braucht's noch den Modifier 'e' am Ende:

$url = "/(\[link=)(((http|https|ftp|ftps):\/\/)(([a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4}))|(([0-9]{1,3}\.){3}([0-9]{1,3})))((\/|\?)?[a-zA-Z0-9~#%&'_\+\/=:\?\.,-]*))(\])/ie";

04.10.2009 18:11

5 Jürgen.bcx

Ok Jörg,
ich verbleibe erstmal dankend und werde es heute Abend mal probieren :)

*edit: Sowas sollte auch mit preg_replace_callback() gehen.

06.10.2009 18:17 | geändert: 06.10.2009 18:27

6 Jürgen.bcx

So, ich habe es probiert; Tests mit dem e-Modifier blieben erfolglos, allerdings klappt mein Vorhaben mit preg_replace_callback() wie gewünscht!

Danke nochmals an dieser Stelle, ohne den Modifieransatz wäre ich wahrscheinlich nicht auf callback gestoßen.

08.10.2009 21:11

Beitrag schreiben (als Gast)

Die Antwort wird nach der Überprüfung durch einen Moderator freigeschaltet.





[BBCode-Hilfe]