2013-01-15 22 views
5

कैसे निम्नलिखित परिमाणकों अलग है - आदि स्थितियों के संबंध, गति, साथआलसी, लालची और स्वामित्व वाले क्वांटिफायर के बीच अंतर क्या हैं?

  • ?, ?? और ?+ सभी मैच 0 या 1 बार
  • *, *? and * + `सभी मैच 0 या अधिक बार
  • +, +? और ++ सभी मैच 1 या अधिक बार

  • ?, * और +लालची हैं।
  • ??, *? और +?अनिच्छुक/आलसी हैं।
  • ?+, *+ और ++स्वामित्व हैं।

क्या कोई मुझे यह समझने में मदद कर सकता है कि इन शर्तों का क्या अर्थ है? एक ही नौकरी के लिए प्रत्येक क्वांटिफायर के तीन भिन्नता क्यों हैं?

+2

क्यों? क्योंकि कहीं कहीं उनका उपयोग करता है? आपको वास्तव में रेगेक्स दस्तावेजों के माध्यम से पढ़ने के लिए समय निकालना होगा, और आईआरबी, या rubular.com का उपयोग करके चीजों को आजमाएं, देखें कि वे कैसे काम करते हैं, और याद रखें कि आपने भविष्य के लिए क्या सीखा। प्रोग्राम में बहुत सी सीखना मामूली परिवर्तनों के प्रभावों का निरीक्षण करने के लिए प्रयोग है, लोगों को उन चीजों को समझाने के लिए नहीं कह रहा है। –

+0

http://www.regular-expressions.info/possessive.html – Phrogz

+0

@TimPietzcker मुझे वोट देने के लिए धन्यवाद। इससे मेरे लिए कोई फर्क नहीं पड़ता, लेकिन नीचे वोट 'नए पदों' को बंद कर देता है - जो मुझे लगता है कि घातक है। मैं कम से कम इस तरह के वोटों के लिए छेड़छाड़ कर रहा हूं, लेकिन ऐसी अवधारणाओं के लिए आपको इतनी उत्सुक अवधारणा वाले लोगों की तरह बहुत अधिक अंतर है। लेकिन कुछ दिनों से कुछ 'एसओ' उपयोगकर्ता मुझे सवालों के महत्व को जानने के बिना दूसरों को 'वोट देने' में ज्यादा रुचि रखते हैं। यह ठीक है अगर आप मेरी 'पोस्ट' नहीं समझते हैं। लेकिन जब जवाब पोस्ट किया गया है और जब जवाब बहुत ज्यादा ज्ञात है, तो वोट देने के लिए वोट वापस क्यों न आएं। – DoLoveSky

उत्तर

7

स्ट्रिंग

aaaab 

डालें और देखें कि कैसे निम्नलिखित regexes यह मेल:

Regex   Submatches 
       group 1 group 2 group3 
(a?)(a*)(ab) a  aa  ab 
(a??)(a*)(ab)   aaa  ab 
(a?+)(a*)(ab) a  aa  ab 
(a*)(a?)(ab) aaa    ab 
(a*?)(a?)(ab)   aaa  ab 
(a*+)(a?)(ab) aaaa    <Match fails!> 
(a+)(a*)(ab) aaa    ab 
(a+?)(a*)(ab) a  aa  ab 
(a++)(a*)(ab) aaaa    <Match fails!> 

स्पष्टीकरण:

  • a? की कोशिश करता एक a मिलान करने के लिए, लेकिन यह तैयार है अगर यह आवश्यक है तो कुछ भी मिलान करने के लिए सफल होने के लिए पूरा मैच।
  • a?? कुछ भी मिलान करने का प्रयास नहीं करता है, लेकिन यह पूरे मैच के सफल होने के लिए एक a से मेल खाने के लिए तैयार है।
  • a?+ एक a से मेल खाने का प्रयास करता है। यदि यह ऐसा कर सकता है, तो यह वापस नहीं होगा, जो कि मैच के सफल होने के लिए जरूरी नहीं था। यदि यह a से मेल नहीं खाता है, तो यह खुशी से कुछ भी मेल नहीं खाएगा, हालांकि।
  • a* की कोशिश करता के रूप में यह कर सकते हैं के रूप में कई a रों मिलान करने के लिए है, लेकिन यह कम a रों मिलान करने के लिए, यहां तक ​​कि कुछ भी नहीं तैयार है कि अगर उस के लिए पूरे मैच सफल होने के लिए आवश्यक है।
  • कुछ भी मिलान करने की कोशिश नहीं करता है, लेकिन यह पूरे मैच के सफल होने के लिए बिल्कुल आवश्यक है, लेकिन यह अधिक आवश्यक नहीं है, लेकिन a एस से मिलान करने के लिए तैयार है।
  • a*+ जितना संभव हो उतना a से मिलान करने का प्रयास करता है।यदि ऐसा हो सकता है, तो यह कम a एस से मेल खाने के लिए नीचे होगा यदि समग्र मैच सफल होने के लिए आवश्यक था। यदि यह एक भी a से मेल नहीं खाता है, तो यह खुशी से कुछ भी मेल नहीं खाएगा, हालांकि।
  • a+ जितना a एस से मिलान करने की कोशिश करता है, लेकिन यह पूरे मैच के सफल होने के लिए आवश्यक है, तो कम a एस (लेकिन कम से कम एक) से मेल खाने के लिए तैयार है।
  • a+? केवल एक a से मेल खाता है, लेकिन यह पूरे मैच के सफल होने के लिए बिल्कुल आवश्यक है जितना a एस से मेल खाने के लिए तैयार है, लेकिन अधिक नहीं।
  • a++ जितना संभव हो उतना a से मिलान करने का प्रयास करता है। यदि ऐसा हो सकता है, तो यह कम a एस से मेल खाने के लिए नीचे होगा यदि समग्र मैच सफल होने के लिए आवश्यक था। यदि यह एक भी a से मेल नहीं खाता है, तो regex विफल रहता है।
+0

आखिरकार एक व्यापक स्पष्टीकरण जो सामान्य "एक या अधिक, आदि", "लालची/गैर लालची" से परे चला जाता है। प्राइमा! – BernardK

+0

@tim उत्कृष्ट! आपने कितना स्पष्टीकरण दिया जो सिर्फ शानदार था! इसे प्यार करो इसे पसंद आया! :) आप के लिए '1 +'! – DoLoveSky

+0

@DoLoveSky, कृपया वोटों के लिए ट्रॉल न करें। Http://stackoverflow.com/faq#reputation को स्पष्टीकरण के लिए देखें कि आप इसके लिए भीख मांगे बिना प्रतिष्ठा प्राप्त करते हैं। –