go中如何使用lookbehind正则表达式?

时间:2015-07-22 21:29:17

标签: ruby regex go

我正在尝试转换这个红宝石正则表达式。

GROUP_CALL = /^(?<i1>[ \t]*)group\(?[ \t]*(?<grps>#{SYMBOLS})[ \t]*\)?[ \t]+do[ \t]*?\n(?<blk>.*?)\n^\k<i1>end[ \t]*$/m

我将其转换为

groupCall := regexp.MustCompile("^(?P<i1>[ \\t]*)group\\(?[ \\t]*(?P<grps>(?::\\w+|:\"[^\"#]+\"|:'[^']+')([ \\t]*,[ \\t]*(?::\\w+|:\"[^\"#]+\"|:'[^']+'))*)[ \\t]*\\)?[ \\t]+do[ \\t]*?\\n(?P<blk>.*?)\\n^\\k<i1>end[ \\t]*$/s")

但在运行时我收到此错误

error parsing regexp: invalid escape sequence: \k

go docs中没有提及\k,是否没有相应的内容?

1 个答案:

答案 0 :(得分:1)

不支持lookbehinds,也不支持 @stribizhev 之类的反向引用。

正则表达式2(RE2)语法参考:
https://github.com/google/re2/wiki/Syntax

  

接受的正则表达式的语法是相同的   Perl,Python和其他语言使用的语法。更确切地说,它   是RE2接受的语法,并描述于   //code.google.com/p/re2/wiki/Syntax,\ C除外。 - GoLang Docs
  (参考: https://golang.org/pkg/regexp/