【问题标题】:How to use lookbehind regexp in go?如何在go中使用lookbehind regexp?
【发布时间】:2015-10-12 23:44:00
【问题描述】:

我正在尝试将此 ruby​​ 正则表达式转换为 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,go 中没有对应的吗?

【问题讨论】:

  • 请查看this answer。简而言之:在 Go 正则表达式中不能使用反向引用。

标签: ruby regex go


【解决方案1】:

不支持后向引用,也不支持像 @stribizhev 这样的反向引用。

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

接受的正则表达式的语法是一样的通用 Perl、Python 和其他语言使用的语法。更准确地说,它 是 RE2 接受的语法,描述于 //code.google.com/p/re2/wiki/语法,\C 除外。 --GoLang 文档
参考:https://golang.org/pkg/regexp/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-16
    • 2013-01-28
    • 2015-08-13
    • 1970-01-01
    • 2021-10-26
    • 2010-12-15
    • 1970-01-01
    相关资源
    最近更新 更多