정규식이 중첩 된 괄호의 캡처 동작을 처리하는 방법에 대한 정의 된 동작이 있습니까? 더 구체적으로 말하면, 다른 엔진이 첫 번째 위치의 바깥 쪽 괄호와 후속 위치의 중첩 된 괄호를 캡처 할 것이라고 합리적으로 예상 할 수 있습니까?
다음 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
)
괄호로 묶인 전체 표현식이 먼저 캡처되고 (테스트하고 싶습니다) 다음으로 안쪽 괄호로 묶인 패턴이 캡처됩니다 ( "want"및 "to"). 이것은 논리적으로 의미가 있지만, 먼저 하위 괄호를 캡처 한 다음 전체 패턴을 캡처하는 경우에도 동일한 논리적 사례가 만들어지는 것을 볼 수 있습니다.
따라서 이것이 정규식 엔진에서 정의 된 동작을 "먼저 전체 캡처"하는 것입니까, 아니면 패턴의 컨텍스트 및 / 또는 엔진의 동작에 따라 달라지는 것인지 (PCRE는 C #이 Java의 것과 다릅니다) 등)?