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