Using positive-lookahead (?=regex) with re2
Since I'm a bit new with re2, I'm trying to figure out how to use positive-lookahead (?=regex)
like JS, C++ or any PCRE style in Go.
Here's some examples of what I'm looking for.
JS:
'foo bar baz'.match(/^[\s\S]+?(?=baz|$)/);
Python:
re.match('^[\s\S]+?(?=baz|$)', 'foo bar baz')
- Note: both examples match
'foo bar '
Thanks a lot.
Solution 1:
According to the Syntax Documentation, this feature isn't supported:
(?=re)
before text matchingre
(NOT SUPPORTED)
Also, from WhyRE2:
As a matter of principle, RE2 does not support constructs for which only backtracking solutions are known to exist. Thus, backreferences and look-around assertions are not supported.
Solution 2:
You can achieve this with a simpler regexp:
re := regexp.MustCompile(`^(.+?)(?:baz)?$`)
sm := re.FindStringSubmatch("foo bar baz")
fmt.Printf("%q\n", sm)
sm[1]
will be your match. Playground: http://play.golang.org/p/Vyah7cfBlH