15

由于我对re2有点陌生,我试图弄清楚如何在Go(?=regex)中使用像 JS、C++ 或任何 PCRE 样式这样的正向前瞻。

这是我正在寻找的一些示例。

JS:

'foo bar baz'.match(/^[\s\S]+?(?=baz|$)/);

Python:

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

非常感谢。

4

2 回答 2

17

根据语法文档,不支持此功能:

(?=re) 在文本匹配之前re(不支持)

另外,来自WhyRE2

原则上,RE2 不支持仅已知存在回溯解决方案的构造。因此,不支持反向引用和环视断言。

于 2015-05-18T14:30:18.983 回答
8

您可以使用更简单的正则表达式来实现这一点:

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

sm[1]将是你的对手。游乐场:http ://play.golang.org/p/Vyah7cfBlH

于 2015-05-18T14:28:25.310 回答