Regülärer Ausdruck (Regex) für URL zu extrahieren

Hallo,

ich habe eine PHP-Anwendung, die ich nur ein klein wenig modifizieren will und habe nahezu keine Ahnung von der PHP-Syntax.

Die Funktion

preg_replace(’/([hf][tps]{2,4}://[^ \t\n\r]+[^ .\t,\n\r()"’])/’, ‚$1‘, $string)

macht aus der URL einen Hyperlink, eingebettet in den übrigen Text. Ich möchte jedoch den restlichen Text wegwerfen und die URL nur als String haben. Wie muss preg_replace verändert werden?

Vielen Dank im voraus!

Hallo, tbones,

ich habe eine PHP-Anwendung, die ich nur ein klein wenig
modifizieren will und habe nahezu keine Ahnung von der
PHP-Syntax.
Die Funktion
preg_replace(’/([hf][tps]{2,4}://[^ \t\n\r]+[^
.\t,\n\r()"’])/’, ‚$1‘,
$string)
macht aus der URL einen Hyperlink, eingebettet in den übrigen
Text. Ich möchte jedoch den restlichen Text wegwerfen und die
URL nur als String haben. Wie muss preg_replace verändert
werden?

So richtig verstanden habe ich Dich noc nicht
(beschreibung könnte Anwendungsbeispiel enthalten),
aber ich vermute, Du möchstest sowas haben: …
$string = ’ „Das ist ein Text _?http://www.example.com,?, abcdef“ ';

text-Link zu hyperlink

$muster = ‚|([hf][tps]{2,4}://\S+[^)(\s;,‘"!?])|’;
$tausch = ‚$1‘;
echo preg_replace($muster, $tausch, $string). „\n“;

text link plain

preg_match_all($muster, $string, $matches);
echo $matches[1][0] . „\n“;
…Falsch geraten?

Grüße

CMb

Das sieht sehr gut aus, danke! Die ursprüngliche Idee war die URLs eines Fließtextes als Hyperlink anzuzeigen, den Link aber mit dieser Funktion zu verkürzen:

function txt_shorter($string, $len=80) {
// shorten a string to 80 characters
if (strlen($string) > $len)
$string = substr($string, 0, $len-3) . „…“;
return $string;
}

Dann fiel mir jedoch ein, dass der Ansatz mit Regex nur für einen Hyperlink pro Input funktioniert. Ich habe daher folgende Funktion versucht:

function text_to_html($string) {
$long = ‚$1‘;
$short = txt_shorter($long,30);
return preg_replace(’/([hf][tps]{2,4}://[^\t\n\r]+[^.\t,\n\r()"’])/’, ‚’.$short.’‘, $string);
}

Diese Funktion zeigt seltsamerweise $short an, aber nur als ungekürter Inhalt von $long. Dies kann ich mir absolut nicht erklären!

Hat keiner eine Ahnung?

Um nur die URL’s aus dem Text zu extrahieren muesstest Du den kompletten Code anfassen, nicht nur die genannte Zeile.
Dies ist nicht mit preg_replace machbar (bzw nur mit Umwegen)

Siehe u.a. http://www.google.de/search?q=php+url+text+extrahieren

Gruss
Stefan