2011-12-20 29 views

उत्तर

86

उन्हें क्वांटिफायर कहा जाता है।

* 0 या पूर्ववर्ती अभिव्यक्ति

+ 1 या पूर्ववर्ती अभिव्यक्ति

डिफ़ॉल्ट प्रति

एक परिमाणक लालची है की अधिक है, यह संभव के रूप में कई से मेल खाता है इसका मतलब है कि के और अधिक।

? क्वांटिफायर के बाद इस क्वांटिफ़ायर को "अविभाज्य" बनाने के व्यवहार को बदलता है, इसका मतलब है कि यह जितना संभव हो सके उतना मिलान करेगा।

उदाहरण लालची/ungreedy

स्ट्रिंग पर उदाहरण के लिए "ABAB"

a.*b "ABAB" (preg_match_all एक मैच "ABAB" वापस आ जाएगी,) से मेल खाएगी

जबकि a.*?b केवल शुरुआती "एबी" से मेल खाता है (preg_match_all दो मैचों को वापस करेगा, "ab")

आप अपने रेगेक्स ऑनलाइन का परीक्षण कर सकते हैं उदा।Regexr पर, see the greedy example here

+0

उचित उदाहरण http://regexr.com/39t01 – Tomas

+0

"आलसी" "आलसी" –

5

+ न्यूनतम एक है, * शून्य भी हो सकता है।

16

पहला (+) एक या अधिक वर्ण है। दूसरा (*) शून्य या अधिक वर्ण है। दोनों गैर लालची (?) हैं और कुछ भी मेल खाते हैं (.)।

+0

... न्यूलाइन को छोड़कर। –

+0

यह इस बात पर निर्भर करता है कि एस संशोधक सेट है या नहीं। – Quentin

4

+ मैचों एक या अधिक पिछले पैटर्न के उदाहरण। * मैचों शून्य या अधिक पिछले पैटर्न के उदाहरण।

तो मूल रूप से, यदि आप + का उपयोग करते हैं तो पैटर्न का कम से कम एक उदाहरण होना चाहिए, यदि आप * का उपयोग करते हैं तो यह तब भी मेल खाएगा जब इसके कोई उदाहरण नहीं हैं।

4

+ मैचों कम से कम एक चरित्र किसी भी संख्या (0 सहित)

* मैचों पात्रों

? की, एक आलसी अभिव्यक्ति को इंगित करता है, तो यह संभव के रूप में कुछ वर्ण से मेल खाएगी।

3

एक सितारा प्लस के समान ही है, केवल अंतर यह है कि प्लस 1 या उससे अधिक के पहले वर्णित चरित्र/समूह से मेल खाता है, शुरुआत 0 या उससे अधिक के साथ मेल खाती है।

2

मिलान करने के लिए स्ट्रिंग नीचे दी गई है।

ab 

पैटर्न (ab.*)ab

के परिणाम के साथ कब्जा समूह के लिए मिलान लौट जबकि पैटर्न (ab.+) से मेल नहीं खाएगी और कुछ भी वापस नहीं होगा।

लेकिन अगर आप के पास निम्न की स्ट्रिंग बदलने के लिए, यह पैटर्न के लिए aba वापस आ जाएगी (ab.+)

aba 
+0

के लिए अधिक आम शब्द है, मुझे लगता है कि यह विशेष रूप से + बनाम * के प्रश्न के लिए बेहतर उत्तर है। – Terrence

0

मुझे लगता है कि पिछले जवाब एक सरल उदाहरण को उजागर करने में विफल:

उदाहरण के लिए हम एक सरणी है:

numbers = [5, 15] 

निम्नलिखित regex अभिव्यक्ति ^[0-9]+ मैचों: 15 ओ केवल तभी। हालांकि, ^[0-9]*5 and 15 दोनों से मेल खाता है। अंतर यह है कि + ऑपरेटर की आवश्यकता है कम से कम एक पूर्ववर्ती regex अभिव्यक्ति की नकल

0

RegEx में, {i,f} का अर्थ है "if के मैचों के बीच है।" के निम्न उदाहरणों पर एक नज़र डालें:

  • {3,7} 3 7 मैच
  • {,10} कोई निचली सीमा के साथ 10 मैच अप करने के लिए इसका मतलब है के बीच का मतलब है (यानी कम सीमा 0 है)
  • {3,} कम से कम का मतलब कोई ऊपरी सीमा के साथ 3 मैचों
  • {,} मैचों की संख्या के लिए कोई ऊपरी सीमा या निचली सीमा का मतलब है (यानी कम सीमा 0 और ऊपरी सीमा अनंत है)
  • (उच्च सीमा यानी अनंत है)साधन वास्तव में 4

सबसे अच्छा भाषाओं, संक्षिप्त होते हैं ऐसा नहीं करता है RegEx:

  • + के लिए {,}
  • ? आशुलिपि है के लिए {1,}
  • * आशुलिपि है {,1} के लिए आशुलिपि है

इसका मतलब है + कम से कम 1 मैच की आवश्यकता है जबकि * किसी भी मैचों या कोई मैचों को स्वीकार नहीं करता है और ? 1 से अधिक मिलान या शून्य मिलान स्वीकार नहीं करता है।

क्रेडिट: Codecademy.com