regex e.+?d
एक 'e'
से मेल खाता है और फिर संभव (ungreedy या अनिच्छुक) के रूप में के रूप में कुछ वर्णों का मिलान करने की कोशिश करता है, एक 'd'
द्वारा पीछा किया। यही कारण है कि निम्नलिखित 2 सबस्ट्रिंग मिलान किया जाता है:
extend cup end table
^^^^^^ ^^^
1 2
regex e.+d
एक 'e'
से मेल खाता है और फिर के रूप में संभव (लालची) के रूप में ज्यादा वर्णों का मिलान करने की कोशिश करता है, एक 'd'
द्वारा पीछा किया।
extend cup end table
^^^^^^^^^^^^^^^^^^^^
regex इंजन पंक्ति के अंत की बात आती है (: क्या होता है कि पहले 'e'
पाया जाता है, और फिर .+
मैचों यह कर सकते हैं जितना (पंक्ति के अंत, या इनपुट तक) है या इनपुट) और regex-pattern में 'd'
से मेल नहीं खा सकता है। तो यह पिछले 'd'
पर बैकट्रैक देखा गया है। यही कारण है कि एकल मैच पाया जाता है:
extend cup end table
^^^^^^^^^^^^^^<----- backtrack
1
स्रोत
2013-01-08 11:33:32
जैसा कि नीचे बताया गया है, यह लालची और आलसी क्वांटिफायर के बीच का अंतर है। लालची जितना संभव हो उतना आलसी, आलसी जितना संभव हो उपभोग करना चाहता है। क्वांटिफायर आलसी होने पर इंजन बाएं से दाएं, चरित्र से 'स्ट्रिंग का निर्माण' चरित्र करेगा। लालची विपरीत करेंगे।यह जितना संभव हो उतना उपभोग करेगा और फिर कुछ वर्णों को दाएं से बाएं, यदि इसे करना है तो छोड़ दें। निम्नलिखित उदाहरण देखें: http://regex101.com/r/dG9zZ2 और http://regex101.com/r/tP5xQ3 –