Gibt es ein definiertes Verhalten dafür, wie reguläre Ausdrücke mit dem Erfassungsverhalten verschachtelter Klammern umgehen sollen? Können Sie insbesondere davon ausgehen, dass verschiedene Engines die äußeren Klammern an der ersten Position und die verschachtelten Klammern an den nachfolgenden Positionen erfassen?
Betrachten Sie den folgenden PHP-Code (unter Verwendung von regulären PCRE-Ausdrücken)
<?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
)
Der gesamte Ausdruck in Klammern wird zuerst erfasst (ich möchte testen), und dann werden die inneren Muster in Klammern erfasst ("wollen" und "bis"). Dies ist logisch sinnvoll, aber ich konnte sehen, dass ein ebenso logischer Fall gemacht wurde, bei dem zuerst die Unterklammern und dann das gesamte Muster erfasst wurden.
Ist dieses Verhalten "Capture the Whole Ding First" in Engines für reguläre Ausdrücke definiert oder hängt es vom Kontext des Musters und / oder vom Verhalten der Engine ab (PCRE unterscheidet sich von C # und Java) als etc.)?