Go语言中匹配字符串前缀子串的高空间效率正则方案咨询
解决方案
你要匹配的子串本质是abcdefg的所有长度≥1且小于原串长度的前缀,不需要罗列所有分支,用嵌套可选分组的写法即可适配Go的正则限制,空间效率更高。
正则写法
针对你的需求(排除完整的abcdefg),正则如下:
^a(b(c(d(e(f)?)?)?)?)?$
写法说明
- 开头的
^和结尾的$是锚定符,保证匹配的是整个输入字符串,避免匹配到输入中间的子串 - 每一层嵌套的括号内的字符是原串的下一个字符,加
?表示该层可选,只会按顺序匹配原串的前缀,不会出现乱序匹配的情况 - 该写法的空间复杂度为O(n)(n为原串长度),远低于罗列分支写法的O(n²)
匹配测试
- 匹配成功:
a、ab、abc、abcd、abcde、abcdef - 匹配失败:
abcdefg、abd、bc、空字符串
如果后续需要包含完整的abcdefg,只需要调整正则为:
^a(b(c(d(e(f(g)?)?)?)?)?)?$
内容的提问来源于stack exchange,提问作者beninato
相关产品推荐
相关产品推荐

