正規表現がネストされた括弧のキャプチャ動作をどのように処理するかについて定義された動作はありますか?より具体的には、異なるエンジンが最初の位置で外側の括弧をキャプチャし、後続の位置でネストされた括弧をキャプチャすることを合理的に期待できますか?
次のPHPコードを検討してください(PCRE正規表現を使用)
<?php
$test_string = 'I want to test sub patterns';
preg_match('{(I (want) (to) test) sub (patterns)}', $test_string, $matches);
print_r($matches);
?>
Array
(
[0] => I want to test sub patterns //entire pattern
[1] => I want to test //entire outer parenthesis
[2] => want //first inner
[3] => to //second inner
[4] => patterns //next parentheses set
)
括弧で囲まれた式全体が最初にキャプチャされ(テストしたい)、次に内側の括弧で囲まれたパターンがキャプチャされます(「want」および「to」)。これは論理的には理にかなっていますが、最初にサブ括弧をキャプチャし、次にパターン全体をキャプチャするために、同様に論理的なケースが作成されていることがわかりました。
つまり、これは正規表現エンジンで定義された「最初にすべてをキャプチャする」動作ですか、それともパターンのコンテキストやエンジンの動作に依存しますか(PCREはC#とは異なり、Javaとは異なります)などより)?