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