この Java 正規表現は、2 つの括弧の間のすべてのテキストと一致すると予想されます。
%(.*?)\((.*?)(?!\\)\)
コメント付きで表示:
%(.*?) # match all text that immediately follows a '%'
\( # match a literal left-paren
(.*?) # match all text that immediately follows the left-paren
(?!\\) # negative lookahead for right-paren: if not preceded by slash...
\) # match a literal right-paren
しかし、そうではありません(このテストで実証されているように)。
この入力の場合:
%foo(%bar \(%baz\)) hello world)
私は期待%bar \(%baz\)
していましたが、見ました%bar \(%baz\
(エスケープされた右括弧なし)。否定的な先読み構造の使用法が何らかの形で間違っていると推測しています。誰かが私の正規表現の問題を説明してもらえますか? ありがとう。