Có hành vi được xác định nào về cách biểu thức chính quy nên xử lý hành vi lưu giữ của các dấu ngoặc đơn lồng nhau không? Cụ thể hơn, bạn có thể kỳ vọng 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?Các nhóm chụp lồng nhau được đánh số như thế nào trong các biểu thức chính quy?
Hãy xem xét các mã PHP sau (sử dụng PCRE biểu thức thông thường)
<?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 hiện trong ngoặc đơn được chụp đầu tiên (Tôi muốn thử nghiệm), và sau đó là mô hình trong ngoặc bên trong được chụp tiếp theo ("muốn" và "đến"). Điều này làm cho cảm giác hợp lý, nhưng tôi có thể thấy một trường hợp hợp lý không kém được thực hiện để lần đầu tiên nắm bắt các dấu ngoặc đơn phụ, và THEN chụp toàn bộ mẫu. Vì vậy, đây là "nắm bắt toàn bộ điều đầu tiên" hành vi được xác định trong công cụ biểu thức chính quy, hoặc là nó sẽ phụ thuộc vào bối cảnh của mô hình và/hoặc hành vi của động cơ (PCRE khác với C# là khác nhau so với Java khác với v.v.)?
Nếu bạn thực sự quan tâm đến tất cả các hương vị regex, "ngôn ngữ thuyết bất khả tri "tag là những gì bạn muốn. Có quá nhiều hương vị để liệt kê tất cả, và hầu hết trong số họ không phù hợp với bất kỳ tiêu chuẩn thực sự (al mặc dù chúng khá nhất quán khi nói đến việc đánh số nhóm). –
Nhóm có thể được truy cập bằng $ 1, $ 2, $ 3 .... v.v. Làm cách nào để truy cập nhóm thứ 10? Nó sẽ là $ 10? Tôi không nghĩ rằng $ 10 sẽ làm việc vì nó sẽ được hiểu là $ 1 theo sau là 0. Điều này có nghĩa là chúng tôi chỉ có thể có tối đa 9 nhóm không? Nếu tác giả có thể, xin vui lòng, bao gồm điều này như là một phần của câu hỏi thì đây sẽ là nơi duy nhất để biết tất cả về các nhóm lồng nhau trong các biểu thức chính quy. – LionHeart