通过 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.comdomain.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? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

使用 RegEx 在字符串中查找特定文本后的数字

python regex

Java Regex:查找带转义的单引号文本

RegEx - 在引号之间查找文本并在括号之间替换

RegEX - 查找Track 1和Track 2子串的磁卡字符串

需要使用 RegEx 和 BeautifulSoup 查找文本