我在浏览器上显示了以下文本,并试图从字符串中获取URL。
字符串 1 = 来自 #switzerland 的语音到文本:http://bit.ly/lnpDC12D
当我尝试使用preg_match并尝试获取 URL 时,但失败了
$urlstr = "";
preg_match('/'b((?#protocol)https?|ftp):'/'/((?#domain)[-A-Z0-9.]+)((?#file)'/[-A-Z0-9+&@#'/%=~_|!:,.;]*)?((?#parameters)'?[A-Z0-9+&@#'/%
=~_|!:,.;]*)?/i', $urlstr, $match);
echo $match[0];
我认为 #switzerland:还有一个http//...会不会有问题?
上面的拆分非常适合下面的字符串,
语音转文本:http://bit.ly/jDcXrZg
在这种情况下,我认为parse_url比基于正则表达式的代码更好。这样的东西可能会起作用(假设您的 URL 始终以 http 开头):
$str = "voice-to-text from #switzerland: http://bit.ly/lnpDC12D";
$pos = strrpos($str, "http://");
if ($pos>=0) {
var_dump(parse_url(substr($str, $pos)));
}
输出
array(3) {
["scheme"]=>
string(4) "http"
["host"]=>
string(6) "bit.ly"
["path"]=>
string(9) "/lnpDC12D"
}
据我了解您的要求,这里有一种方法可以做到:
$str = 'voice-to-text from <a href="search.twitter.com/…;: http://bit.ly/lnpDC12D';
preg_match("~(bit.ly/'S+)~", $str, $m);
print_r($m);
输出:
Array
(
[0] => bit.ly/lnpDC12D
[1] => bit.ly/lnpDC12D
)