दोनों के बीच क्या अंतर है:
(.+?)
तथा
(.*?)
जब मैं इसे अपने php preg_matchregex में उपयोग करता हूँ ?
दोनों के बीच क्या अंतर है:
(.+?)
तथा
(.*?)
जब मैं इसे अपने php preg_matchregex में उपयोग करता हूँ ?
जवाबों:
उन्हें क्वांटिफायर कहा जाता है।
* पूर्ववर्ती अभिव्यक्ति के 0 या अधिक
+ पूर्ववर्ती अभिव्यक्ति के 1 या अधिक
डिफ़ॉल्ट रूप से एक क्वांटिफायर लालची होता है, इसका मतलब है कि यह अधिक से अधिक पात्रों से मेल खाता है।
?एक परिमाणक के बाद व्यवहार में परिवर्तन इस परिमाणक "ungreedy" बनाने के लिए, साधन यह संभव के रूप में छोटे रूप में भरपाई कर देंगे।
उदाहरण लालची / अकुशल
स्ट्रिंग "पर उदाहरण के लिए ABAB "
a.*b मैच "अबाब" (प्रीग_मैच_आल एक मैच, "अबाब" लौटाएगा
जबकि a.*?bकेवल "अब" शुरू होगा (preg_match_all दो मैच लौटाएगा, "ab"
आप अपने regexes का ऑनलाइन परीक्षण कर सकते हैं जैसे Regexr पर, यहाँ लालची उदाहरण देखें
(.+?)और (.*?)नियमित अभिव्यक्ति कर रहे हैं जिनमें से एक विभिन्न स्थिति में अलग तरह से व्यवहार a(.+?), (.+?)b, a(.+?)b, a(.*?), (.*?)b, a(.*?)b।
.*जितना संभव हो सकेगा। यदि आप जल्द से जल्द रोकना चाहते हैं, तो आपको इसे .*?
एक +से मेल खाता है एक या अधिक पूर्ववर्ती पैटर्न के उदाहरण। एक पूर्ववर्ती पैटर्न के शून्य या अधिक उदाहरणों से *मेल खाता है ।
मूल रूप से, यदि आप उपयोग करते हैं तो +पैटर्न का कम से कम एक उदाहरण होना चाहिए, यदि आप इसका उपयोग करते हैं *तो यह तब भी मेल खाएगा यदि इसके कोई उदाहरण नहीं हैं।
+ कम से कम एक पात्र से मेल खाता है
* किसी भी संख्या (वर्णों सहित) से मेल खाता है
?एक आलसी अभिव्यक्ति को इंगित करता है, तो यह संभव के रूप में कुछ पात्रों के रूप में मेल खाएगी।
नीचे विचार करें कि मिलान करने के लिए स्ट्रिंग है।
ab
पैटर्न (ab.*)परिणाम के साथ कैप्चर समूह के लिए एक मैच लौटाएगाab
जबकि पैटर्न (ab.+)मैच नहीं करेगा और कुछ भी नहीं लौटाएगा।
लेकिन यदि आप स्ट्रिंग को निम्नलिखित में बदलते हैं, तो यह abaपैटर्न के लिए वापस आ जाएगा(ab.+)
aba
रेगुलर एक्सप्रेशन से में {i,f}"के बीच का मतलब iकरने के लिए fमैच"। आइए निम्नलिखित उदाहरणों पर एक नज़र डालें:
{3,7} 3 से 7 मैचों के बीच का मतलब है {,10} 10 से कम मैचों का मतलब बिना किसी सीमित सीमा के (यानी कम सीमा 0 है){3,} कम से कम 3 मैच बिना ऊपरी सीमा के (यानी उच्च सीमा अनंत है){,} मैचों की संख्या के लिए कोई ऊपरी सीमा या निचली सीमा नहीं है (अर्थात निचली सीमा 0 है और ऊपरी सीमा अनंत है){5} मतलब बिल्कुल 4 अधिकांश अच्छी भाषाओं में संक्षिप्तियाँ होती हैं, इसलिए RegEx:
+ के लिए आशुलिपि है {1,}* के लिए आशुलिपि है {,}? के लिए आशुलिपि है {,1}इस साधन के +लिए कम से कम 1 मैच की आवश्यकता होती है, जबकि *किसी भी संख्या में कोई भी मैच या कोई मैच ?स्वीकार नहीं करता है और 1 से अधिक मैचों या शून्य मैचों को स्वीकार नहीं करता है।
साभार: Codecademy.com
एक तारा एक प्लस से बहुत मिलता-जुलता है, केवल अंतर यह है कि जब प्लस 1 या उससे अधिक पूर्ववर्ती वर्ण / समूह से मेल खाता है, तो स्टार 0 या अधिक से मेल खाता है।
मुझे लगता है कि पिछले जवाब एक सरल उदाहरण को उजागर करने में विफल रहे:
उदाहरण के लिए हमारे पास एक सरणी है:
numbers = [5, 15]
निम्नलिखित रेगेक्स अभिव्यक्ति ^[0-9]+मेल खाती है: 15केवल। हालाँकि, ^[0-9]*दोनों में मेल खाता है 5 and 15। अंतर यह है कि +ऑपरेटर को पूर्ववर्ती रेगेक्स अभिव्यक्ति के कम से कम एक डुप्लिकेट की आवश्यकता होती है