RegExp, die 4711te...

cozmixx

Mitglied
Hallo, ich weiss, dass zu diesem Thema schon eine Menge Beiträge existieren, die ich auch gewissenhaft durchgeackert habe. Allerdings brauche ich bei dem letzten Teil meines Problem nun wohl doch noch eine kleine Hilfestellung.

Also: aus einem Fließtext sollen sowohl http:// und www - Passagen in klickbare Links umgewandelt werden. Das klappt auch mit dem von mir verwendeten Code bestens - nur: bei "längeren" Links, z. B. http://www.amazon.de/exec/obidos/AS...264361/sr=8-1/ref=pd_ka_1/028-4520903-2658929
(wird hier übrigens auch verkürzt dargestellt) möchte ich gerne lediglich http://www.amazon.de ausgegeben haben. Und daran verzweifel ich langsam...

mein Skript:

PHP:
 $text = "Pre-Listen unter http://www.amazon.de/exec/obidos/ASIN/B0009C2UUC/qid%3D1133264361/sr%3D8-1/ref%3Dpd%5Fka%5F1/028-4520903-2658929";
   
 $text = eregi_replace("(http:[/]{2})?(www.([a-zA-Z0-9/./_/-]|[/]|[~]|[?]|[&]|[=]|[%])*)","<a href=\" http://\\2\" target=\"_blank\">\\1\\2</a>", $text);
   
 return $text;

Some help wanted, please... :confused:
 
Zuletzt bearbeitet:
Hab`s bis jetzt so gelöst, aber das Wahre ist diese Lösung nicht:

PHP:
 $text = eregi_replace("(http:[/]{2})?(www.([a-zA-Z0-9/./_/-]|[/]|[~]|[?]|[&]|[=]|[%])*)",
 "<a href=\" http://\\2\" target=\"_blank\">&laquo;Link&raquo;</a>",
 $text);

Weiss den keiner Rat? Die Skriptzeile steckt innerhalb einer Funktion, welche aus einer größeren Textmenge auch noch Sonderzeichen & Zeilenumbrüche etc. ersetzt, falls das weiterhilft...
 
Sowas vielleicht?
PHP:
function chkLen($url){
  if(strlen($url) > 20)
    return '<a href='.$url.'>'.substr($url,0, 20).'...'.substr($url,-1,5).'</a>';
  else
    return '<a href='.$url.'>'.$url.'</a>';	
}

 $text = "http://www.amazon.de/exec/obidos/ASIN/B0009C2UUC/qid%3D1133264361/sr%3D8-1/ref%3Dpd%5Fka%5F1/028-4520903-2658929";
   
 $text = preg_replace("§http://(?:(?:(?:(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?:\.(?:\d+)){3}))(?::(?:\d+))?)(?:/(?:(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;:@&=])*)(?:/(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;:@&=])*))*)(?:\?(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;:@&=])*))?)§eusi", "chklen('\\0')", $text);
   
 return $text;
 
Zuletzt bearbeitet:
Erstmal dankeschön für die Antwort :)

Ich habs ausprobiert, krieg aber leider die Fehlermeldung "Warning: Delimiter must not be alphanumeric or backslash in" (Zeile mit der RegExp).
Fragt sich jetzt nur noch, auf welchen Backslashin der RegExp verzichtet werden kann... :confused:
 
Zurück