Hier passend ist der Code iregex für http und www Urls in einer PHP-String
function parseURL($text) {
$regex = "#\b(([\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/)))#iS";
preg_match_all($regex, $text, $matches);
foreach($matches[0] as $pattern){
$text = str_replace($pattern, "<a href=\"$pattern\" target=\"_blank\">$pattern</a> ", $text);
}
return $text;
}
meine regex Aus irgendeinem Grund bin mit, die die folgenden Ergebnisse ausgibt: (fett = verknüpft)
www.domain.com
http: // www.domain.com
Weiter
so funktioniert es gut, außer wenn es enthält sowohl http und www an welcher Stelle es nur aus dem www Teil verbindet.
irgendeine idee warum?
EDIT
Für alle, die dies lesen Sie das Update erforderlich ist, ist hier die Arbeits Code dank Wiktor Stribiżew ..
function parseURL($text) {
$regex = "@\b(([\w-]+://?|www[.])[^\s()<>]+(?:\(\w+\)|([^[:punct:]\s]|/)))@i";
$subst = "<a href='$0' target='_blank'>$0</a>";
$text = preg_replace($regex, $subst, $text);
return $text;
}
Warum Sie ersetzen Streichhölzer? Verwenden Sie einfach 'preg_replace' direkt. Auch "S" macht hier keinen Sinn (auch wenn Sie 's', DOTALL) verwenden wollten. Siehe [diese PHP-Demo] (https://ideone.com/5hj7fX). –
Gibt es einen Grund, warum Sie http://php.net/manual/en/function.parse-url.php nicht verwenden? – Oliver
@Anant, wenn es mehr als eine URL in der $ Textzeichenfolge gibt – FoxyFish