Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:从字符串获取URL的正则表达式_Php_Regex_Url - Fatal编程技术网

PHP:从字符串获取URL的正则表达式

PHP:从字符串获取URL的正则表达式,php,regex,url,Php,Regex,Url,可能的重复项: 我正在编写一些PHP代码,它从各种来源获取输入,需要找到URL并将其保存在某个地方。需要处理的输入类型如下: http://www.youtube.com/watch?v=IY2j_GPIqRA Try google: http://google.com! (note exclamation mark is not part of the URL) Is http://somesite.com/ down for anyone else? 输出: http://www.yo

可能的重复项:

我正在编写一些PHP代码,它从各种来源获取输入,需要找到URL并将其保存在某个地方。需要处理的输入类型如下:

http://www.youtube.com/watch?v=IY2j_GPIqRA
Try google: http://google.com! (note exclamation mark is not part of the URL)
Is http://somesite.com/ down for anyone else?
输出:

http://www.youtube.com/watch?v=IY2j_GPIqRA
http://google.com
http://somesite.com/
我已经从互联网上借用了一个正则表达式,但不幸的是,它删除了查询字符串-不好


如果有人能帮我们组合一个正则表达式,或者是这个问题的另一个解决方案,我们将不胜感激。

为什么不试试这个呢。这是谷歌搜索“URL正则表达式”的第一个结果

不是PHP,但它应该可以工作,我只是通过转义前斜杠稍微修改了它


Jan Goyvaerts,Regex大师。这里有很多警告,例如正确提取括号内的URL。您需要什么完全取决于输入数据的“质量”

对于您提供的示例,
\b(?(?:https?| ftp | file)://www\.| ftp\)[-A-Z0-9+&@#/%=~|$?!:,.]*[A-Z0-9+&@#/%=~|$]
在不区分大小写模式下使用时有效

因此,要查找多行字符串中的所有匹配项,请使用

preg_match_all('/\b(?:(?:https?|ftp|file):\/\/|www\.|ftp\.)[-A-Z0-9+&@#\/%=~_|$?!:,.]*[A-Z0-9+&@#\/%=~_|$]/i', $subject, $result, PREG_PATTERN_ORDER);
$result = $result[0];
preg_match_all('/\b(?:(?:https?|ftp|file):\/\/|www\.|ftp\.)[-A-Z0-9+&@#\/%=~_|$?!:,.]*[A-Z0-9+&@#\/%=~_|$]/i', $subject, $result, PREG_PATTERN_ORDER);
$result = $result[0];