通过 php 和正则表达式从文本字符串中查找 url?

发布于 2024-11-09 19:55:38 字数 1671 浏览 0 评论 0原文

我知道问题标题看起来很重复。但有些解决方案我在这里没有找到。

我需要找到文本字符串形式的网址:

$pattern = '`.*?((http|https)://[\w#$&+,\/:;[email protected]]+)[^\w#$&+,\/:;[email protected]]*?`i';

    if (preg_match_all($pattern,$url_string,$matches)) {
        print_r($matches[1]);
    }

使用这种模式我能够找到带有 http://https:// 的网址没关系。但我有用户输入,人们添加像 www.domain.com 甚至 domain.com 这样的网址,

所以,我需要首先验证字符串,我可以在其中替换 www .domain.com domain.com 前面带有通用协议 http:// 。或者我需要想出更好的模式?

我不擅长正则表达式,不知道该怎么办。

我的想法是首先找到带有 http://https:// 的网址,将它们放入数组中,然后用空格替换这些网址(" ") 在文本字符串中,然后使用其他模式。但我不确定使用什么模式。

我正在使用这个 $url_string = preg_replace($pattern, ' ', $url_string ); 但这会删除任何 www.domain.comdomain.com两个有效 url 之间的 url,其中包含 http://https://

如果您能提供帮助,那就太好了。

为了让事情更清楚

我需要一种模式或其他一些方法,可以在文本字符串中找到所有网址。 url 的示例为:

  1. domain.com
  2. www.domain.com
  3. http://www.domain.com
  4. http://domain.com
  5. https ://www.domain.com
  6. https://domain.com

谢谢! 5.

I know the question title looks very repetitive. But some of the solution i did not find here.

I need to find urls form text string:

$pattern = '`.*?((http|https)://[\w#
amp;+,\/:;[email protected]]+)[^\w#
amp;+,\/:;[email protected]]*?`i';

    if (preg_match_all($pattern,$url_string,$matches)) {
        print_r($matches[1]);
    }

using this pattern i was able to find urls with http:// and https:// which is okey. But i have user input where people add url like www.domain.com even domain.com

So, i need to validate the string first where i can replace www.domain.com domain.com with common protocol http:// before them. Or i need to comeup with more good pattern?

I am not good with regex and don't know what to do.

My idea is first finding the urls with http:// and https:// the put them in an array then replace these url with space(" ") in the text string then use other patterns for it. But i am not sure what pattern to use.

I am using this $url_string = preg_replace($pattern, ' ', $url_string ); but that removes if any www.domain.com or domain.com url between two valid url with http:// or https://

If you can help that will be great.

To make things more clear:

i need a pattern or some other method where i can find all urls in a text sting. the example of url are:

  1. domain.com
  2. www.domain.com
  3. http://www.domain.com
  4. http://domain.com
  5. https://www.domain.com
  6. https://domain.com

thanks!
5.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

洛阳烟雨空心柳 2024-11-16 19:55:38
$pattern = '#(www\.|https?://)?[a-z0-9]+\.[a-z0-9]{2,4}\S*#i';
preg_match_all($pattern, $str, $matches, PREG_PATTERN_ORDER);
$pattern = '#(www\.|https?://)?[a-z0-9]+\.[a-z0-9]{2,4}\S*#i';
preg_match_all($pattern, $str, $matches, PREG_PATTERN_ORDER);
国产ˉ祖宗 2024-11-16 19:55:38

我不确定我是否正确理解了您的需求,但是您可以使用这样的东西:

preg_match('#^.+?://#', $url);

查找字符串上是否指定了协议,如果没有,则附加 http://

I'm not sure if I've understood what you need correctly, but can you use something like this:

preg_match('#^.+?://#', $url);

to find if there is a protocol specified on the string, and if not just append http://

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文