可能的重复:
识别字符串中是否存在 URL https://stackoverflow.com/questions/951198/identifying-if-a-url-is-present-in-a-string
Php 解析链接/电子邮件 https://stackoverflow.com/questions/1038284/php-parse-links-emails
我正在编写一些 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?
Output:
http://www.youtube.com/watch?v=IY2j_GPIqRA
http://google.com
http://somesite.com/
我已经从互联网上借用了一种有效的正则表达式,但不幸的是擦除了查询字符串 - 不好!
任何帮助组合正则表达式的帮助,或者可能是此问题的其他解决方案,将不胜感激。
Jan Goyvaerts,正则表达式大师,在他的博客中解决了这个问题 http://www.regexguru.com/2008/11/detecting-urls-in-a-block-of-text/。有很多注意事项,例如正确提取括号内的 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];
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)