क्या एक परिभाषित व्यवहार है कि नियमित भावों को नेस्टेड कोष्ठक के कैप्चरिंग व्यवहार को कैसे संभालना चाहिए? अधिक विशेष रूप से, क्या आप यथोचित अपेक्षा कर सकते हैं कि विभिन्न इंजन पहली स्थिति में बाहरी कोष्ठक पर कब्जा करेंगे, और बाद के पदों में निहित कोष्ठक?
निम्नलिखित 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
)
पूरे कोष्ठक की अभिव्यक्ति पहले कैप्चर की गई है (मैं परीक्षण करना चाहता हूं), और फिर आंतरिक कोष्ठक पैटर्न अगले ("चाहते हैं" और "से") पर कब्जा कर लिया गया है। यह तार्किक समझ में आता है, लेकिन मैं पहले उप-कोष्ठक पर कब्जा करने के लिए एक समान तार्किक मामला देख सकता था, और पूरे पैटर्न को कैप्चर कर रहा था।
तो, क्या यह "पूरी चीज़ को पहले कैप्चर करता है" नियमित अभिव्यक्ति इंजन में परिभाषित व्यवहार, या क्या यह पैटर्न और / या इंजन के व्यवहार के संदर्भ पर निर्भर करने वाला है (PCRE C # की तुलना में भिन्न होने के नाते जावा के अलग होने से भिन्न है) आदि से)?