正则表达式匹配 golang 中不以 www 开头的字符串

2024-04-20

我有以下正则表达式^http:\/\/(?!www\.)(.*)$

预期行为:

http://example.com - Match
http://www.example.com - Does not match

看起来像golang不支持负向前瞻。我怎样才能重写这个正则表达式来工作golang?

UPDATE

我没有使用 golang 编码,我正在使用Traefik https://traefik.io接受正则表达式(golang 风格)作为配置值,所以基本上我有这个:

regex = "^https://(.*)$"
replacement = "https://www.$1"

我想要的是始终添加www.到 URL,但是NOT如果 URL 已经有,否则会变成www.www.*


如果您真的想手动创建负前瞻,则需要排除所有可能的情况w在正则表达式中:

^https?://(([^w].+|w(|[^w].*)|ww(|[^w].+)|www.+)\.)?example\.com$

该正则表达式允许任何前面带有点的单词example.com,除非这个词只是www。它通过允许任何不以w,或者,如果它开头为w就是这样w或后跟一个非w和其他东西。如果以两个开头w,那么它必须要么就是这样,要么后面跟着一个非w。如果它开始于www, it must后面跟着某事。

Demo https://regex101.com/r/tT04sG/1

澄清使这变得容易得多。该方法是始终(可选)匹配www.然后总是将其放回替换中:

Search:

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

Replace:

http://www.$1

Demo 2 https://regex101.com/r/tT04sG/3

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

正则表达式匹配 golang 中不以 www 开头的字符串 的相关文章

随机推荐