我在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循环的情况下实现此目的。
答案 0 :(得分:6)
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