php regex从string获取第一个URL

时间:2015-01-28 13:16:54

标签: php regex

我在PHP中使用以下正则表达式从字符串中抓取URL

regex = '/https?\:\/\/[^\" ]+/i';
$string = "lorem ipsum http://google.com lorem ipusm dolor http://yahoo.com/something";
preg_match_all($regex, $string, $matches);
$urls = ($matches[0]);

$urls会返回所有网址。如何只返回第一个URL?在这种情况下http://google.com

我试图在不使用foreach循环的情况下实现此目的。

5 个答案:

答案 0 :(得分:6)

根据documentation

  

preg_match_all - 执行全局正则表达式匹配

由于您只使用一个,因此您应该使用preg_match

  

执行正则表达式匹配

$regex = '/https?\:\/\/[^\" ]+/i';
$string = "lorem ipsum http://google.com lorem ipusm dolor http://yahoo.com/something";
preg_match($regex, $string, $matches);
echo $matches[0];

收率:

http://google.com

答案 1 :(得分:1)

使用preg_match代替preg_match_all

答案 2 :(得分:1)

preg_match_all()有一个标志参数,您可以使用该参数来排序结果。您拥有变量$matches的参数是您的结果,应该在该数组中列出。

$matches[0][0];//is your first item.
$matches[0][1];//is your second

最好使用preg_match()而不是preg_match_all()

以下是关于您的旗帜的preg_match_all()文档。 Link here!

答案 3 :(得分:0)

^.*?(https?\:\/\/[^\" ]+)

试试这个。抓住捕获或组。参见演示。

https://regex101.com/r/pM9yO9/5

$re = "/^.*?(https?\\:\\/\\/[^\\\" ]+)/";
$str = "lorem ipsum http://google.com lorem ipusm dolor http://yahoo.com/something";

preg_match_all($re, $str, $matches);

答案 4 :(得分:0)

只需打印第0个索引。

$regex = '/https?\:\/\/[^\" ]+/i';
$string = "lorem ipsum http://google.com lorem ipusm dolor http://yahoo.com/something";
preg_match_all($regex, $string, $matches);
$urls = ($matches[0]);
print_r($urls[0]);

输出:

http://google.com