我正试图在围棋中创建一个正则表达式,它最多匹配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}$`)
我正试图在围棋中创建一个正则表达式,它最多匹配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}$`)
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}$