我已经建立了一个正则表达式,在网址周围放置一个锚标记,如下所示:
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\\~\\!\\@\\#\\$\\%\\^\\&\\*\\(\\)_\\-\\=\\+\\\\\\\/\\?\\.\\:\\;\\'\\,]*+)(?!<\/a>)
答案 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
花式图:
答案 1 :(得分:0)
你没有说出你正在使用哪种正则表达式。希望有一些工作负面观察的东西,比如PCRE:
结合并扩展之前的答案:
(?<!["']>|["'])(?:(?:https?:\/\/)|(?<!\/\/)www\.|(?:https?::\/\/)www\.)(?:\w+\.)+\w+(?:\/[a-z0-9-._~:\/?#[\]@!$&'()*+,;=%]*)?
在此播放:https://regex101.com/r/jCpbgi/1
这应该适用于各种各样的网址和域名,并且不匹配以前链接的网址。