क्या कोई मुझे बता सकता है कि [0-9]+
और [0-9]++
के बीच क्या अंतर है?[0-9] + और [0-9] ++ के बीच क्या अंतर है?
उत्तर
PCRE इंजन है, जो पीएचपी नियमित अभिव्यक्ति के लिए उपयोग करता है, "possessive quantifiers" समर्थन करता है:
Quantifiers
+
के बाद "अधिकार" कर रहे हैं। वे जितना संभव हो सके उतने पात्र खाते हैं और शेष पैटर्न से मेल नहीं खाते हैं। इस प्रकार.*abc
मैचों"aabc"
लेकिन.*+abc
इसलिए नहीं है क्योंकि.*+
संपूर्ण स्ट्रिंग खाती है। प्रसंस्करण को तेज करने के लिए संभावित क्वांटिफायर का उपयोग किया जा सकता है।
और:
PCRE_UNGREEDY विकल्प (जो पर्ल में उपलब्ध नहीं है एक विकल्प है) तो परिमाणकों डिफ़ॉल्ट रूप से लालची नहीं हैं, लेकिन अलग-अलग लोगों को उन लोगों के साथ पालन करते हुए लालची बनाया जा सकता है सेट है, तो एक प्रश्न चिह्न। दूसरे शब्दों में, यह डिफ़ॉल्ट व्यवहार को बदल देता है।
अंतर इस प्रकार है:
/[0-9]+/ - one or more digits; greediness defined by the PCRE_UNGREEDY option
/[0-9]+?/ - one or more digits, but as few as possible (non-greedy)
/[0-9]++/ - one or more digits, but as many as possible (greedy, default)
This snippet अंतर visualises जब लालची-दर-डिफ़ॉल्ट मोड में। ध्यान दें कि पहला स्निपेट अंतिम रूप से अंतिम जैसा ही है, क्योंकि अतिरिक्त +
डिफ़ॉल्ट रूप से पहले से लागू होता है (एक अर्थ में)।
This snippet पीसीRE_UNGREEDY (अविभाज्य-डिफ़ॉल्ट-डिफ़ॉल्ट मोड) लागू करते समय अंतर को दर्शाता है। देखें कि डिफ़ॉल्ट कैसे उलट है।
++
(और ?+
, *+
और {n,m}+
) possessive quantifiers कहा जाता है।
दोनों [0-9]+
और [0-9]++
मैच एक या अधिक ASCII अंक है, लेकिन दूसरा एक regex इंजन मैच में पीछे की कि यदि आवश्यक हो तो हो जाना चाहिए के लिए समग्र regex सफल होने के लिए अनुमति नहीं दी जाएगी।
उदाहरण:
[0-9]+0
, स्ट्रिंग 00
से मेल खाता है, जबकि [0-9]++0
नहीं करता है।
पहले मामले में, [0-9]+
पहले 00
से मेल खाता है, लेकिन फिर मिलान करने के लिए निम्नलिखित 0
को अनुमति देने के लिए एक वर्ण बैकट्रैक करता है। दूसरे मामले में, ++
इसे रोकता है, इसलिए पूरा मिलान विफल रहता है।
सभी रेगेक्स स्वाद इस वाक्यविन्यास का समर्थन नहीं करते हैं; कुछ अन्य इसके बजाय atomic groups लागू करते हैं (या यहां तक कि दोनों)।
आपके उत्तर के लिए धन्यवाद! – user557108
- 1. क्रोंटैब सेट 18:00 से 09:00
- 2. कन्वर्ट 01, 02, 03, 04 .. 09 1,2,3,4 के लिए ... 9
- 3. क्या WPF और डेल्फी 2007/09 win32 का उपयोग करना संभव है?
- 4. विदेशी भाषाओं में PHP दिनांक() - उदा। मार्च 25 Aoû 09
- 5. # {} $ {} और% {} के बीच क्या अंतर है?
- 6. [अपरिभाषित] और [,] के बीच क्या अंतर है?
- 7. $ और $$ के बीच क्या अंतर है?
- 8. के बीच क्या अंतर है:। और: आर !?
- 9. भिन्नता और '-' के बीच क्या अंतर है?
- 10. "$^एन" और "$ +" के बीच क्या अंतर है?
- 11. टेम्पलेट डॉक्क्स दस्तावेज़ और ओपन एक्सएमएल एसडीके 2.0 (अगस्त 09) में सामग्री को कैसे बदलें?
- 12. के बीच क्या अंतर है?
- 13. अंतर और कहां के बीच क्या अंतर है?
- 14. जावास्क्रिप्ट में "नई संख्या (...)" और "संख्या (...)" के बीच क्या अंतर है?
- 15. SQL सर्वर डेटाटाइप केवल समय फ़ील्ड को स्टोर करने के लिए 09:10 आदि
- 16. त्रुटि: तर्क सूची बहुत बड़ा है: पुनरावर्ती हैडर विस्तार/अनुप्रयोग/iWork '09 /Pages.app/.../Contents/Resources
- 17. file_get_contents और fread बीच क्या अंतर है
- 18. क्या बीच का अंतर है :: और ::: स्काला
- 19. "। +" और "। +?" के बीच अंतर
- 20. बैश स्क्रिप्ट में printf के साथ विचित्र समस्या: "09" और "08" अमान्य संख्याएं हैं, "07" और "06" ठीक हैं
- 21. $ {} और # {} के बीच अंतर क्या हैं?
- 22. PHP के बीच क्या अंतर है और इसमें शामिल है?
- 23. अपवाद के .TOString() और मैसेज के बीच क्या अंतर है?
- 24. 7zip के 7z.sfx और 7zsd.sfx के बीच क्या अंतर है?
- 25. डीएल के फाइलवर्सन और उत्पादवर्जन के बीच क्या अंतर है?
- 26. UIImageView के फ्रेम और सीमाओं के बीच क्या अंतर है?
- 27. फ़ायरबग के console.log() और console.debug() के बीच क्या अंतर है?
- 28. पैरामीटर परिभाषाओं के बीच अंतर (प्रकार और नाम), और (प्रकार * नाम) के बीच अंतर क्या हैं?
- 29. पूर्व में कनवर्ट करना। 2010-09-11T00: 00: 00 + 01: 00 एनएसडीएटी
- 30. ओरिएंटब संस्करणों के बीच क्या अंतर है?
यह काफी डुप्लिकेट नहीं है, लेकिन सवाल का जवाब देना चाहिए: http://stackoverflow.com/questions/4489551/what-is-double-plus-in-regular-expressions – Spudley
मैंने कभी ' ++ 'regex में, और ऐसा लगता है कि बहुत से अन्य लोगों के पास नहीं है, लेकिन खुदाई का एक छोटा सा दिखाता है कि यह मान्य है। – Spudley
क्षमा करें, मुझे वह नहीं मिला। – user557108