Чи існує визначена поведінка того, як регулярні вирази повинні обробляти поведінку захоплення вкладених дужок? Більш конкретно, чи можете ви обґрунтовано очікувати, що різні двигуни захоплять зовнішні дужки в першій позиції, а вкладені дужки в наступні позиції?
Розглянемо наступний 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 ніж тощо)?