REGEX替换任何类型的URL

时间:2014-11-01 09:23:46

标签: php regex

我的字符串是:

$msg = '
Here are all URLs:
------------------
google.com
www.google.com
http://google.com
http://www.google.com
ftp://ftp.google.com
';

我尝试使用以下REGEX来匹配任何类型的网址,并且应该重新填充空行:

$msg = preg_replace("/^.*\b(http:\/\/)?(www\.)[^.]+\.com\b.*$/m",'',$msg);

但它返回:

Here are all URLs:
------------------
google.com

http://google.com

ftp://ftp.google.com

这意味着上述REGEX仅替换这些网址:www.google.comhttp://www.google.com

请帮忙!

4 个答案:

答案 0 :(得分:0)

将正则表达式更改为

^.*\b((http|ftp):\/\/)?((www|ftp)\.)?[^.]+\.com$

了解正则表达式如何匹配http://regex101.com/r/dI1cP2/4

/^.*\b(http:\/\/)?(www\.)[^.]+\.com\b.*$

中出错了什么
  • wwwgoogle.com

    中是可选的

    更正在小组?末尾添加了量词(www|ftp)\.)?

  • ftp协议将无法与正则表达式匹配

    通过将其添加到更改来更正。 http|ftp):\/\/)?((www|ftp)\.)?

    这两个组都是可选的,由最后的量词?制作

  • 从示例中,需要验证的字符串以.com结尾。不需要使用.*进行额外匹配。使用.com$锚定到字符串的末尾。它可以防止www.google.comxxxxx等不需要的字符串验证

答案 1 :(得分:0)

^(http:\/\/)?(www\.)?(ftp:\/\/)?.*\.com\b.*$

试试这个。我猜你只想删除url's.Made www可选,因为有些网址不包含它。还添加了ftp,因为有些网址有它。参见演示。

http://regex101.com/r/jI8lV7/3

答案 2 :(得分:0)

试试这个正则表达式:^.*\b(?:((http|ftp):\/\/)|(www\.))?[^.]+\.com\b.*$

demo

你在这里ftp遗失:((http|ftp):\/\/)|(www\.)?我检查httpftp后跟://www.是否存在google.com。请注意表达式末尾的问号,它允许您匹配以下网址:{{1}}

答案 3 :(得分:0)

试试这个:

$msg = preg_replace("/^.*\b(?:((http|ftp):\/\/)|(www\.))?[^.]+\.com\b.*$/m", "","{$msg}");