首页 > 解决方案 > 正则表达式匹配golang中不以www开头的字符串

问题描述

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

预期行为:

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

看起来golang不支持负前瞻。如何重写此 RegEx 以进行处理golang

更新

我没有使用 golang 进行编码,我使用是接受 Regex(golang 风格)作为配置值的 Traefik,所以基本上我有这个:

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

我想要的是始终添加www。到 URL,但如果 URL 已经有它,则不是,否则它将变为www.www.*

标签: regexgotraefik

解决方案


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

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

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

演示

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

搜索:

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

代替:

http://www.$1

演示 2


推荐阅读