Существует ли определенное поведение для того, как регулярные выражения должны обрабатывать захват вложенных круглых скобок? Более конкретно, можете ли вы разумно ожидать, что разные движки будут фиксировать внешние скобки в первой позиции и вложенные скобки в последующих позициях?
Рассмотрим следующий код 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
)
Сначала захватывается все выражение в скобках (я хочу протестировать), а затем следом захватываются внутренние шаблоны в скобках («хочу» и «к»). Это имеет логический смысл, но я мог видеть не менее логичный случай для первого захвата дополнительных скобок, а ЗАТЕМ захват всего шаблона.
Итак, это определенное поведение в механизмах регулярных выражений "сначала захватить все", или оно будет зависеть от контекста шаблона и / или поведения механизма (PCRE отличается от C #, чем отличается от Java, чем и т.д.)?