15

私はre2(?=regex)に少し慣れていないので、 JS、C++、またはGoの PCRE スタイルのような前向き先読みを使用する方法を理解しようとしています。

ここに私が探しているもののいくつかの例があります。

JS:

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

パイソン:

re.match('^[\s\S]+?(?=baz|$)', 'foo bar baz')
  • 注: どちらの例も一致します'foo bar '

どうもありがとう。

4

2 に答える 2

17

Syntax Documentationによると、この機能はサポートされていません。

(?=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 に答える