PHP:正则表达式从字符串获取URL
问题描述:
可能重复:
Identifying if a URL is present in a string
Php parse links/emailsPHP:正则表达式从字符串获取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.youtube.com/watch?v=IY2j_GPIqRA
http://google.com
http://somesite.com/
我已经从工作,但不幸的是互联网借一个正则表达式抹查询串出- 不好!
任何帮助把一个正则表达式,或者可能是另一个解决方案,这个问题,将不胜感激。
答
为什么不试试这个。这是谷歌搜索“URL正则表达式”的第一个结果。
((https?|ftp|gopher|telnet|file|notes|ms-help):((\/\/)|(\\\\))+[\w\d:#@%\/;$()~_?\+-=\\\.&]*)
不是PHP,但它应该工作,我通过转义斜杠只是稍微修改它。
答
月Goyvaerts,正则表达式大师,has addressed this issue in his blog。有相当多的警告,例如正确提取括号内的网址。你需要什么取决于你的输入数据的“质量”。
对于您提供的示例,\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];