我正试图在围棋中创建一个正则表达式,它最多匹配50个单词,每个单词由空格分隔,每个单词是1-32个"a"s 我正在使用以下正则表达式

regexp.Compile(`^(a{1,32}\s?){1,50}$`)

并且我收到以下错误

error parsing regexp: invalid repeat count: `{1,50}`

我注意到,它确实可以像这样重复31次

r, err := regexp.Compile(`^(a{1,32}\s?){1,31}$`)

https://go.dev/play/p/RLnroX9-57_m

推荐答案

GO的regexp引擎有a limit个,其中顶层和任何内部重复的组合不得超过最里面重复部分的a limit0个副本.这在《re2 Syntax spec》中有记载.

在您的例子中,最高可达31,因为内部32*外部31=992.超过该限制时,32*32=1024和32*50=1600将不起作用.

解决方法是将表达式拆分为多个部分:^(a{1,32}\s?){1,31}(a{1,32}\s?){0,19}$

Go相关问答推荐

无法找到与golang、nginx和postquist进行的docker-compose./主要

在字符串与字符串子切片上使用len进行位转移产生意外输出

VS代码,Golang格式顽固的情况与switch / case

如何使用GRPC UnaryClientInterceptor中的`maily`参数?

如何修复Go中调用GetRawInputDeviceInfA Windows API函数时的错误?

Golang应用程序:所请求的资源上不存在HTTP-Control-Allow-Origin标头

带有条件的for循环中缺少RETURN语句

在Go中旋转矩阵

当我有外键时,如何使用 GORM 创建数据库的新条目

无法读取postman 中的表单数据

Go-如何在递归函数中关闭通道

Go Programming Language书上的例子server2错了吗?

在 Golang 模板中计算时间/持续时间

在删除级联时无法在 Gorm 中按预期工作

自定义指标未显示在 prometheus web ui 中,grafana 中也是如此

使用正则表达式拆分具有相同标题的数据块

Grafana/Prometheus 将多个 ip 可视化为查询

如何从字符串中删除多个换行符`\n`但只保留一个?

不理解切片和指针

如何使用 httputil.ReverseProxy 设置 X-Forwarded-For