对于正则表达式应如何处理嵌套括号的捕获行为,是否存在已定义的行为?更具体地说,您是否可以合理地期望不同的引擎将在第一个位置捕获外部括号,并在随后的位置捕获嵌套的括号?
考虑以下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与Java不同)比等)?