这个 panic 是因为 Go 的正则表达式库 (regexp) 不支持 Perl 风格的负向前瞻 (negative lookahead) 语法 (?!...)。Go 的正则表达式基于 RE2 引擎,它故意设计为不支持某些复杂的 Perl 正则特性(如前瞻和后顾断言),以保证性能和线性时间复杂度。
正则表达式 ^((?!0)[0-9]{1,10})$ 中,(?!0) 是一个负向前瞻,试图匹配“后面不跟 0”的模式,但这在 Go 中会报错。
问题分析
想匹配的应该是一个 1 到 10 位数字的字符串,且不能以 0 开头(例如 “123” 是合法的,但 “0123” 或 “0” 是不合法的)。由于 Go 不支持 (?!0),我们需要换一种方式实现这个逻辑。
解决方法
可以用更简单的方式表达这个需求,避免使用前瞻语法。以下是一个等效的正则表达式:
memoRegex := `^[1-9][0-9]{0,9}$`
解释:
^[1-9]:字符串以 1-9 中的任意数字开头(保证不以 0 开头)。[0-9]{0,9}:后面跟着 0 到 9 个任意数字,总长度范围在 1 到 10 位。$:字符串结束。
这个正则表达式可以正确匹配:
- “1”(1 位)
- “12”(2 位)
- “1234567890”(10 位)
但不会匹配:
- “0”(

最低0.47元/天 解锁文章
3274

被折叠的 条评论
为什么被折叠?



