Có một hành vi được xác định cho cách các biểu thức chính quy sẽ xử lý hành vi bắt của các dấu ngoặc đơn lồng nhau không? Cụ thể hơn, bạn có thể mong đợi một cách hợp lý rằng các công cụ khác nhau sẽ nắm bắt các dấu ngoặc đơn bên ngoài ở vị trí đầu tiên và các dấu ngoặc đơn lồng nhau ở các vị trí tiếp theo không?
Hãy xem xét mã PHP sau (sử dụng biểu thức chính quy 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
)
Toàn bộ biểu thức trong ngoặc đơn được ghi lại đầu tiên (tôi muốn kiểm tra), và sau đó các mẫu có dấu ngoặc đơn bên trong được ghi lại tiếp theo ("muốn" và "đến"). Điều này có ý nghĩa hợp lý, nhưng tôi có thể thấy một trường hợp hợp lý tương tự được thực hiện khi đầu tiên chụp các dấu ngoặc phụ và SAU đó chụp toàn bộ mẫu.
Vì vậy, đây là hành vi được xác định "nắm bắt toàn bộ điều đầu tiên" trong công cụ biểu thức chính quy hay nó sẽ phụ thuộc vào ngữ cảnh của mẫu và / hoặc hành vi của công cụ (PCRE khác với C # khác với Java là khác hơn vv)?