¿Existe un comportamiento definido sobre cómo las expresiones regulares deben manejar el comportamiento de captura de paréntesis anidados? Más específicamente, ¿puede esperar razonablemente que diferentes motores capturen los paréntesis externos en la primera posición y los paréntesis anidados en las posiciones posteriores?
Considere el siguiente código PHP (usando expresiones regulares 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
)
La expresión completa entre paréntesis se captura primero (quiero probar), y luego los patrones internos entre paréntesis se capturan a continuación ("quiero" y "para"). Esto tiene sentido lógico, pero pude ver un caso igualmente lógico para capturar primero los subparéntesis y LUEGO capturar el patrón completo.
Entonces, ¿este comportamiento definido de "capturar todo primero" en motores de expresión regular, o va a depender del contexto del patrón y / o del comportamiento del motor (PCRE es diferente de C # es diferente de Java es diferente que etc.)?