正则表达式链接网址忽略现有链接

时间:2017-02-02 00:35:24

标签: html regex

我已经建立了一个正则表达式,在网址周围放置一个锚标记,如下所示:

http://www.google.com
https://www.google.com
http://google.com

它忽略了大小写,它也忽略了已经在链接中的网址,例如:

<a href="hTTP://www.google.com">HttP://www.google.com</a>

我需要做的最后一点是链接一个不在协议之前的网址,但至少以www。开头,例如:

www.google.com

我可以在这里看到并调整我保存的正则表达式:

https://regex101.com/r/Rf3HF8/1

这是真正的正则表达式:

(?i)(?<!")http(s)?:\/\/([a-zA-Z0-9\\~\\!\\@\\#\\$\\%\\^\\&amp;\\*\\(\\)_\\-\\=\\+\\\\\\\/\\?\\.\\:\\;\\'\\,]*+)(?!<\/a>)

2 个答案:

答案 0 :(得分:0)

你可以尝试这个:

((?:http(s)?(:\/\/)))?((?:www\.)?)([\w-]+)(\.)(com)

打破它:

  • ((?:http(s)?(:\/\/)))? - http上的可选匹配,https加上://但不是://

  • ((?:www\.)?) - www.

  • 上的可选匹配项
  • ([\w-]+) - 匹配一个或多个[a-zA-Z_]和连字符 - 这是google部分

  • (\.) - 在.google

  • 之间匹配com
  • (com) - 只需匹配com部分

正则表达式完全匹配以下示例:

http://www.google.com
https://www.google.com
http://google.com
https://google.com
www.google.com
www.google-blah.com

仅部分匹配:

://www.foo.com
http://sub.domain.com

保存在此处:https://regex101.com/r/vlYZ5N/1

花式图:

enter image description here

答案 1 :(得分:0)

你没有说出你正在使用哪种正则表达式。希望有一些工作负面观察的东西,比如PCRE:

结合并扩展之前的答案:

(?<!["']>|["'])(?:(?:https?:\/\/)|(?<!\/\/)www\.|(?:https?::\/\/)www\.)(?:\w+\.)+\w+(?:\/[a-z0-9-._~:\/?#[\]@!$&'()*+,;=%]*)?

在此播放:https://regex101.com/r/jCpbgi/1

这应该适用于各种各样的网址和域名,并且不匹配以前链接的网址。