我在浏览器上显示以下文本并尝试从字符串中获取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
答案 0 :(得分:1)
在这种情况下,我认为parse_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"
}
答案 1 :(得分:0)
据我了解您的要求,这是一种方法:
$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
)