按域名回显字符串中的所有网址? PHP

时间:2017-06-24 23:46:18

标签: php regex url extract preg-match-all

尝试按域名/

提取所有网址

中的任何网址
http://reports.example.com/report?
https://reports.example.com/report? 

字符串包含

$string = "http://reports.example.com/report?id=randomtext  afdf sadfsdf https://reports.example.com/report?id=randomtext sdfsd sdf afa geadg";

我认为preg_match_all会起作用吗?

$urls = preg_match_all(~http://reports.example.com/reportid=~|https://reports.example.com/report?id=);

我试过这个不起作用,只是获取http ID变量,(urls以空格结束以将它们分开)

preg_match_all("/reports.example.com/main(.*?) \"/is", $contents, 
$matches);
foreach ($matches[1] as $url)
{
 echo $url. "<br />\n";
 }

1 个答案:

答案 0 :(得分:1)

  1. 您在PHP中的正则表达式的开头和结尾只有一个分隔符。
  2. 只需使用s ?可选,即可使协议安全或不安全。
  3. .是一个特殊字符,在意图是字面意义时应该进行转义(尽管很可能很少会遇到1个字符的URL)。
  4. ?也是一个特殊字符并且具有类似的情况,尽管在这种情况下您不会得到匹配,因为?仅使前面的字符/组可选(它不会将自己匹配为.。)
  5. 尝试:

    https?://reports\.example\.com/report\?id=[a-z0-9A-Z]+
    

    演示:https://regex101.com/r/Eq6Lea/1/

    这也假设id参数只有字母数字字符,如果允许其他参数添加到该字符类。这也假定URL只有id参数,并且始终存在。