मुझे नियमित अभिव्यक्तियों पर यह उत्कृष्ट ट्यूटोरियल मिला और जब मैं सहजता से समझ गया कि "लालची", "अनिच्छुक" और "अधिकारी" मात्रात्मक क्या करते हैं, तो मेरी समझ में एक गंभीर छेद प्रतीत होता है।
विशेष रूप से, निम्नलिखित उदाहरण में:
Enter your regex: .*foo // greedy quantifier
Enter input string to search: xfooxxxxxxfoo
I found the text "xfooxxxxxxfoo" starting at index 0 and ending at index 13.
Enter your regex: .*?foo // reluctant quantifier
Enter input string to search: xfooxxxxxxfoo
I found the text "xfoo" starting at index 0 and ending at index 4.
I found the text "xxxxxxfoo" starting at index 4 and ending at index 13.
Enter your regex: .*+foo // possessive quantifier
Enter input string to search: xfooxxxxxxfoo
No match found.
स्पष्टीकरण में पूरे इनपुट स्ट्रिंग को खाने का उल्लेख है , पत्रों का सेवन किया गया है , मिलान करने वाले का समर्थन किया गया है , "फू" की सही घटना को फिर से संगठित किया गया है , आदि।
दुर्भाग्य से, अच्छा रूपकों के बावजूद, मुझे अभी भी समझ में नहीं आया है कि किसके द्वारा खाया जाता है ... क्या आपको एक और ट्यूटोरियल के बारे में पता है जो बताता है (संक्षेप में) कैसे नियमित अभिव्यक्ति इंजन काम करते हैं?
वैकल्पिक रूप से, यदि कोई व्यक्ति निम्नलिखित पैराग्राफ को कुछ अलग-अलग वाक्यांशों में समझा सकता है, तो इसकी बहुत सराहना की जाएगी:
पहला उदाहरण लालची क्वांटिफायर का उपयोग करता है। * "कुछ भी", शून्य या अधिक बार खोजने के लिए, उसके बाद "एफ" "ओ" "ओ" अक्षर। क्योंकि क्वांटिफायर लालची होता है। * * एक्सप्रेशन का हिस्सा पहले पूरे इनपुट स्ट्रिंग को खाता है। इस बिंदु पर, समग्र अभिव्यक्ति सफल नहीं हो सकती है, क्योंकि पिछले तीन अक्षर ("एफ" "ओ" "ओ") पहले ही भस्म हो चुके हैं ( किसके द्वारा? )। इसलिए मिलान करने वाला धीरे-धीरे बंद हो जाता है ( दाएं-से-बाएं? ) एक समय में एक अक्षर जब तक "फू" की सबसे दाहिनी घटना को पुनर्जीवित नहीं किया जाता है ( इसका क्या मतलब है? ), जिस बिंदु पर मैच सफल होता है और खोज समाप्त होती है।
दूसरा उदाहरण, हालांकि, अनिच्छुक है, इसलिए यह पहले उपभोग से शुरू होता है ( किसके द्वारा? ) "कुछ भी नहीं"। क्योंकि "फू" स्ट्रिंग की शुरुआत में प्रकट नहीं होता है, इसे निगलने के लिए मजबूर किया जाता है ( कौन निगलता है?) पहला अक्षर (एक "x"), जो 0 और 4 पर पहले मैच को ट्रिगर करता है। हमारी टेस्ट हार्नेस प्रक्रिया जारी रहती है जब तक इनपुट स्ट्रिंग समाप्त नहीं हो जाती। यह 4 और 13 में एक और मैच पाता है।
तीसरा उदाहरण एक मैच खोजने में विफल रहता है क्योंकि क्वांटिफायर का अधिकारी है। इस स्थिति में, पूरे इनपुट स्ट्रिंग का सेवन किया जाता है। * + (( कैसे? ) को अभिव्यक्ति के अंत में "फू" को संतुष्ट करने के लिए कुछ भी नहीं छोड़ा जाता है। उन स्थितियों के लिए एक परिमाणी मात्रात्मक का उपयोग करें, जहाँ आप बिना किसी चीज़ के सभी को जब्त करना चाहते हैं ( मतलब बंद का मतलब क्या है ;); यह उन मामलों में बराबर लालची क्वांटिफायर से आगे निकल जाएगा, जहां मैच तुरंत नहीं मिला है।
*
,+
और लालची?
होते हैं । मिनिमल क्वांटिफायर जैसे*?
,+?
और आलसी??
होते हैं । अधिकार परिमाणकों तरह*+
,++
है, और?+
कर रहे हैं चिपचिपा।