使用正向前瞻(?=正则表达式)和re2

时间:2015-05-18 14:12:55

标签: regex go re2

由于我对re2有点新意,我试图弄清楚如何在Go中使用JS,C ++或任何PCRE样式的正向前瞻.sqlite

以下是我正在寻找的一些例子。

JS:

(?=regex)

的Python:

'foo bar baz'.match(/^[\s\S]+?(?=baz|$)/);
  • 注意:两个示例都匹配re.match('^[\s\S]+?(?=baz|$)', 'foo bar baz')

非常感谢。

2 个答案:

答案 0 :(得分:12)

根据Syntax Documentation,此功能不受支持:

  文本匹配前{p> (?=re) re(不支持)

此外,来自WhyRE2

  

原则上,RE2不支持仅知道存在回溯解的构造。因此,不支持反向引用和环视声明。

答案 1 :(得分:5)

您可以使用更简单的正则表达式实现此目的:

re := regexp.MustCompile(`^(.+?)(?:baz)?$`)
sm := re.FindStringSubmatch("foo bar baz")
fmt.Printf("%q\n", sm)

sm[1]将是您的匹配。游乐场:http://play.golang.org/p/Vyah7cfBlH