Czy istnieje zdefiniowane zachowanie dotyczące sposobu, w jaki wyrażenia regularne powinny obsługiwać zachowanie przechwytywania zagnieżdżonych nawiasów? Mówiąc dokładniej, czy można rozsądnie oczekiwać, że różne silniki będą przechwytywać nawiasy zewnętrzne na pierwszej pozycji i nawiasy zagnieżdżone w kolejnych pozycjach?
Rozważ następujący kod PHP (używając wyrażeń regularnych 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
)
Najpierw przechwytywane jest całe wyrażenie w nawiasach (chcę przetestować), a następnie przechwytywane są wewnętrzne wzorce ujęte w nawiasy („chcę” i „do”). Ma to logiczny sens, ale mogłem zobaczyć równie logiczny przypadek, w którym najpierw przechwytuje się nawiasy dodatkowe, a NASTĘPNIE przechwytuje cały wzór.
Czy to "najpierw przechwyć całą rzecz" zdefiniowane zachowanie w silnikach wyrażeń regularnych, czy będzie zależało od kontekstu wzorca i / lub zachowania silnika (PCRE różni się od C # jest inny niż Java jest inny niż itp.)?