在php中从textarea拆分url

时间:2012-02-09 10:57:53

标签: php url split textarea

我对正则表达式知之甚少。我发现这段代码可以检测链接,或者你可以说插入用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以便我可以使用该链接。

3 个答案:

答案 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)

尝试两个步骤:

  • 使用preg_match或preg_match_all捕获网址,指定&amp; $ matches参数
  • 通过str_replace用标签替换网址,循环匹配

答案 2 :(得分:0)

如果要捕获每个匹配项并在替换前进一步操作,可以使用pre_replace_callback,或将其保存在其他位置。您也可以存储该正则表达式并稍后进行匹配。我会使用前者,因为你可能在字符串中有多个链接,它比在匹配项上运行你自己的for循环更清晰。