我对正则表达式知之甚少。我发现这段代码可以检测链接,或者你可以说插入用textarea写的链接
$url = 'this is just a link http://stackoverflow.com/ to test';
$text = preg_replace("
#((http|https|ftp)://(\S*?\.\S*?))(\s|\;|\)|\]|\[|\{|\}|,|\"|'|:|\<|$|\.\s)#ie",
"'<a href=\"$1\" target=\"_blank\">$3</a>$4'",
$url
);
echo $text;
输出: 这只是一个链接stackoverflow.com来测试
但我需要将链接分离为该文本区域的变量。例如变量 $ var = http://stackoverflow.com以便我可以使用该链接。
答案 0 :(得分:2)
您可以尝试这种方式:
$text = 'this is just a link http://stackoverflow.com/ to test';
$regex = "/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/";
if(preg_match($regex, $text, $url)) { // $url is now the array of urls
// here you should check $url content and length
echo $url[0]; // the first one in this case
}
else {
// no urls found
}
答案 1 :(得分:0)
尝试两个步骤:
答案 2 :(得分:0)
如果要捕获每个匹配项并在替换前进一步操作,可以使用pre_replace_callback,或将其保存在其他位置。您也可以存储该正则表达式并稍后进行匹配。我会使用前者,因为你可能在字符串中有多个链接,它比在匹配项上运行你自己的for循环更清晰。