通过 php 和正则表达式从文本字符串中查找 url?
我知道问题标题看起来很重复。但有些解决方案我在这里没有找到。
我需要找到文本字符串形式的网址:
$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.com
或 domain.com两个有效 url 之间的
url,其中包含 http://
或 https://
如果您能提供帮助,那就太好了。
为了让事情更清楚:
我需要一种模式或其他一些方法,可以在文本字符串中找到所有网址。 url 的示例为:
- domain.com
- www.domain.com
- http://www.domain.com
- http://domain.com
- https ://www.domain.com
- 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:
- domain.com
- www.domain.com
- http://www.domain.com
- http://domain.com
- https://www.domain.com
- https://domain.com
thanks!
5.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我不确定我是否正确理解了您的需求,但是您可以使用这样的东西:
查找字符串上是否指定了协议,如果没有,则附加
http://
I'm not sure if I've understood what you need correctly, but can you use something like this:
to find if there is a protocol specified on the string, and if not just append
http://