Frage zu preg_replace

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Seether
Mitglied
Beiträge: 1446
Registriert: 10.10.2002 23:42

Frage zu preg_replace

Beitrag von Seether »

Leider habe ich große Schwierigkeiten im Umgang mit der Pattern Syntax.

Es geht um den konkreten Fall, dass ich wie es phpbb macht URLs klickbar machen möchte, aber nicht, falls bestimmte Domains drin vorkommen.

Wenn ich micht nicht täusche wandelt das hier urls im Format xxxx://yyyy in klickbare links um
$ret = preg_replace("#(^|[\n ])([\w]+?://[^ \"\n\r\t<]*)#is", "\\1<a href=\"\\2\" target=\"_blank\" class=\"forum2\">\\2</a>", $ret);
Was müsste ich jetzt einfügen, dass es nicht gemacht werden soll wenn die domain seite.de drin enthalten ist?


S.
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag von Pyramide »

Wenn ich die [php=pcre.pattern.syntax#regexp.reference.assertions]Doku[/php] richtig verstehe, müsste das mit einer "negative lookahead assertion" funktionieren:

Code: Alles auswählen

$ret = preg_replace("#(^|[\n ])([\w]+?://(?!www\\.seite\\.de)[^ \"\n\r\t<]*)#is", "\\1<a href=\"\\2\" target=\"_blank\" class=\"forum2\">\\2</a>", $ret);
(ungetestet)
KB:knigge
Seether
Mitglied
Beiträge: 1446
Registriert: 10.10.2002 23:42

Beitrag von Seether »

Ui, das echt ein wenig zu hoch für mich im Moment.

Wie wäre denn dann das Gegenteil davon? Also, dass nur Links umgewandelt werden in denen seite.de als Domain drin vorkommt?


S.
Benutzeravatar
Blutgerinsel
Mitglied
Beiträge: 1801
Registriert: 19.07.2004 18:53
Wohnort: Landkreis Ulm
Kontaktdaten:

Beitrag von Blutgerinsel »

ungetestet:

Code: Alles auswählen

$neuerstring=preg_replace('#(http[s]?://[w]{3}\.blubb\.de(.*)$)#is','<a href="\1">\1</a>',$quellstring);
Der Domain Name muss maskiert werden da würde denke ich preg_quote(); gute Dienste tun.

Auch ist preg_replace besser durch preg_replace_callback auszutauschen um keine unschönen langen Url zu generieren und diese mit Punkten etc. zu kürzen aber dazu bedarf es einer eigenen geschriebenen Funktion. Nur um die Ersetzungsfunktion durch den regulären Ausdruck anzustossen halte ich preg_replace_callback für die bessere Wahl :wink:
Antworten

Zurück zu „Coding & Technik“