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