通过 php 和 regex 从文本字符串中查找 url? [复制]
Posted
技术标签:
【中文标题】通过 php 和 regex 从文本字符串中查找 url? [复制]【英文标题】:Finding urls from text string via php and regex? [duplicate] 【发布时间】:2011-09-01 22:08:07 【问题描述】:我知道问题标题看起来很重复。但是我在这里没有找到一些解决方案。
我需要从文本字符串中查找 url:
$pattern = '`.*?((http|https)://[\w#$&+,\/:;=?@.-]+)[^\w#$&+,\/:;=?@.-]*?`i';
if (preg_match_all($pattern,$url_string,$matches))
print_r($matches[1]);
使用这种模式,我能够找到带有http://
和https://
的网址,这很好。但我有用户输入,人们添加像www.domain.com
甚至domain.com
这样的网址
所以,我需要先验证字符串,我可以在它们之前用通用协议 http://
替换 www.domain.com
domain.com
。或者我需要想出更好的模式?
我不擅长正则表达式,不知道该怎么办。
我的想法是首先找到带有http://
和https://
的网址,然后将它们放在一个数组中,然后在文本字符串中用空格(“”)替换这些网址,然后使用其他模式它。但我不确定要使用什么模式。
我正在使用这个$url_string = preg_replace($pattern, ' ', $url_string );
,但如果有www.domain.com
或domain.com
两个有效网址与http://
或https://
之间的网址,则删除它
如果您能提供帮助,那就太好了。
为了让事情更清楚:
我需要一种模式或其他方法,我可以在其中找到文本字符串中的所有 url。 url的例子是:
-
domain.com
www.domain.com
http://www.domain.com
http://domain.com
https://www.domain.com
https://domain.com
谢谢! 5.
【问题讨论】:
您是否正在验证来自带有 URL 字段的表单的用户输入?或者你是在抓取一个页面/文本块来生成一个在其中找到的 URL 列表?您尝试解析的“文本字符串”的完整示例可能会有所帮助。 @baraboom:是的,来自用户输入文本框。人们可以在哪里输入这样的推特:twitter.com/user facebook:facebook.com etc.. 【参考方案1】:$pattern = '#(www\.|https?://)?[a-z0-9]+\.[a-z0-9]2,4\S*#i';
preg_match_all($pattern, $str, $matches, PREG_PATTERN_ORDER);
【讨论】:
谢谢!几乎工作!还是要找模式domain.com
@Sisir 将 1
替换为 ?
以使 http:// 或 www 可选。
这对我不起作用。我收到一个空的结果。 $pattern = '#(www\.|https?:\/\/)?[a-zA-Z0-9]2,254\.[a-zA-Z0-9]2,4(\S*)#i'; $count = preg_match_all($pattern, 'http://www.Imaurl.com', $matches, PREG_PATTERN_ORDER);
并且preg_last_error()
没有错误
将其复制并粘贴到交互式 php shell 中,我也得到空白结果。此外,2,254
限制不支持像t.co
这样的域,这些域现在越来越受欢迎。试图编辑答案,但编辑显然必须> 6个字符:-(哦,我不认为这会匹配像me-too.com
这样的域。【参考方案2】:
我不确定我是否正确理解了您的需求,但是您可以使用以下内容吗:
preg_match('#^.+?://#', $url);
查找字符串上是否指定了协议,如果没有则追加http://
【讨论】:
以上是关于通过 php 和 regex 从文本字符串中查找 url? [复制]的主要内容,如果未能解决你的问题,请参考以下文章