8

先読みアサーション内でキャプチャ グループを使用するにはどうすればよいですか?

このコード:

say "ab" ~~ m/(a) <?before (b) > /;

戻り値:

「a」
 0 => 「a」

しかし、「b」もキャプチャすることを期待していました。

そうする方法はありますか?

「b」をマッチの一部にしたくないので、先読みの外に「b」を残したくありません。

「b」をキャプチャする方法はありますが、それでもマッチの外に残しますか?

ノート:

次のように、Raku のキャプチャ マーカーを使用しようとしました。

say "ab" ~~ m/<((a))> (b) /;

「a」
 0 => 「a」
 1 => 「b」

しかし、「b」が一致の外側に残っていても、正規表現は「b」を処理しているため、これは期待どおりに機能しないようです。そして、私も処理されたくありません。

例えば:

say 'abab' ~~ m:g/(a)<?before b>|b/;

(「a」
    0 => 「a」
 「b」 
 「a」
    0 => 「a」
 「b」)

# Four matches (what I want)
 

say 'abab' ~~ m:g/<((a))>b|b/;

(「a」
    0 => 「a」 
 「a」
    0 => 「a」)

# Two matches
4

1 に答える 1