Golang正则表达式:如何匹配不以指定字符串结尾的内容
解决Golang正则匹配不以特定字符串结尾的问题
因为Golang采用的RE2正则引擎不支持负向前瞻,要实现匹配不以NOT_ENDING_WITH_THIS结尾的字符串,可以用两种方案:
方案一:使用正则表达式(适用于固定长度后缀)
RE2支持固定长度的负向后断言,结合两种场景编写正则:
- 字符串长度小于目标后缀长度,直接匹配
- 字符串长度足够,但结尾不是目标后缀
假设NOT_ENDING_WITH_THIS的长度为20,对应的正则为:
^(?:.{0,19}$|.*(?<!NOT_ENDING_WITH_THIS))$
如果后缀长度不固定,这种方式会受限。
方案二:结合字符串函数+简单正则
更通用的方式是通过逻辑取反实现:
- 用
strings.HasSuffix(s, "NOT_ENDING_WITH_THIS")判断字符串是否属于要排除的范围 - 若返回
false,则该字符串就是需要匹配的目标
如果一定要用纯正则逻辑,也可以先匹配所有以目标后缀结尾的字符串(即你给出的^(.*NOT_ENDING_WITH_THIS)$),再在代码中对匹配结果取反。
内容的提问来源于stack exchange,提问作者Lucien
相关产品推荐
相关产品推荐

