उत्तर
आपके ऊपर के उदाहरण में ज्यादा अंतर (अधिकांश भाषाओं में) नहीं है। मुख्य अंतर यह है कि ()
संस्करण एक समूह बनाता है जिसे मैच में \1
द्वारा वापस संदर्भित किया जा सकता है (या, कभी-कभी, $1
)। []
संस्करण ऐसा नहीं करता है।
इसके अलावा,
/(ab|cd)/ # matches 'ab' or 'cd'
/[abcd]/ # matches 'a', 'b', 'c' or 'd'
सबसे पहले, जब regexes के बारे में बात, यह अक्सर महत्वपूर्ण regexes किस तरह आप के बारे में बात कर रहे हैं निर्दिष्ट करने के लिए है। कई भिन्नताएं हैं (जैसे पारंपरिक पॉज़िक्स रेगेक्स, पर्ल और पर्ल-संगत रेगेक्स (पीसीआरई) इत्यादि)।
मान लिया जाये कि PCRE या बहुत कुछ इसी तरह है, जो अक्सर सबसे आम इन दिनों है, वहाँ तीन प्रमुख अंतर हैं:
- निक्षिप्त समूहों का उपयोग करना, आप एक से अधिक चरित्र से मिलकर विकल्पों की जांच कर सकते हैं। तो/(ए | बी)/हो सकता है इसके बजाय/(abc | defg) /।
- अभिभावक समूह एक कैप्चर ऑपरेशन करते हैं ताकि आप परिणाम निकाल सकें (ताकि यदि यह "बी" से मेल खाता हो, तो आप वापस "बी" प्राप्त कर सकते हैं और उसे देख सकते हैं)।/[एबी]/नहीं करता है। कैप्चर ऑपरेशन को जोड़कर ओवरराइड किया जा सकता है?: जैसे:/(?: a | b)/
- भले ही आप कोष्ठक के कैप्चर व्यवहार को ओवरराइड करते हैं, फिर भी अंतर्निहित कार्यान्वयन तब भी तेज़ हो सकता है जब आप जांच रहे हों एकल वर्ण (हालांकि कुछ भी नहीं कहता है कि गैर-कैप्चरिंग (?: ए | बी) को विशेष मामले के रूप में अनुकूलित नहीं किया जा सकता है [ab], लेकिन regex संकलन कभी इतना लंबा ले सकता है)।
नियमित अभिव्यक्ति में ()
नियमित अभिव्यक्तियों को समूहबद्ध करने के लिए उपयोग किया जाता है, जिससे आप एक चरित्र की बजाय पूरी अभिव्यक्ति को ऑपरेटरों को लागू करने की अनुमति देते हैं। उदाहरण के लिए, अगर मैं नियमित अभिव्यक्ति ab
है, तो ab*
एक a
किसी भी (आदि उदाहरण के लिए, a
, ab
, abb
,) b
रों की संख्या से पीछा करने के लिए, संदर्भित करता है, जबकि (ab)*
(अनुक्रम ab
की पुनरावृत्ति के किसी भी संख्या को संदर्भित करता है उदाहरण के लिए, खाली स्ट्रिंग, ab
, abab
, आदि)। कई नियमित अभिव्यक्ति इंजनों में, ()
का उपयोग संदर्भ बनाने के लिए भी किया जाता है जिसे मिलान के बाद संदर्भित किया जा सकता है। उदाहरण के लिए, रुबी में, "foo" =~ /f(o*)/
निष्पादित करने के बाद, $1
में oo
होगा।
|
नियमित अभिव्यक्ति में वैकल्पिकता दर्शाता है; इसका मतलब बार से पहले अभिव्यक्ति, या उसके बाद अभिव्यक्ति है। आप 0|1|2|3|4|5|6|7|8|9
अभिव्यक्ति के साथ किसी भी अंक से मेल खा सकते हैं। उप-अभिव्यक्ति को समूहबद्ध करने या कैप्चर करने के प्रयोजनों के लिए आप अक्सर कोष्ठक के एक सेट में लिपटे विकल्प को देखेंगे, लेकिन इसकी आवश्यकता नहीं है। foo
या bar
को इंगित करने के लिए आप foo|bar
जैसे लंबे अभिव्यक्तियों पर वैकल्पिकता का उपयोग कर सकते हैं।
आप में कुछ भी नहीं के साथ एक दूसरे के बगल हर नियमित अभिव्यक्ति (औपचारिक, सैद्धांतिक समझ, नहीं बढ़ाया अर्थ है कि कई भाषाओं का प्रयोग), बस प्रत्यावर्तन |
, क्लीन बंद *
, संयोजन (सिर्फ दो भाव लेखन के साथ व्यक्त कर सकते हैं बीच), और समूह के लिए ब्रांड्स।लेकिन जटिल अभिव्यक्तियों के लिए यह असुविधाजनक होगा, इसलिए कई शॉर्टेंड आमतौर पर उपलब्ध होते हैं। उदाहरण के लिए, x?
|x
(यानी खाली स्ट्रिंग या x
) के लिए सिर्फ एक शॉर्टेंड है, जबकि y+
yy*
के लिए एक शॉर्टेंड है।
[]
मूल रूप से सभी पात्रों, या वर्णों की श्रेणियों के वैकल्पिक |
के लिए एक शॉर्टेंड हैं। जैसा कि मैंने कहा, मैं 0|1|3|4|5|6|7|8|9
लिख सकता था, लेकिन [0-9]
लिखना अधिक सुविधाजनक है। मैं किसी भी पत्र का प्रतिनिधित्व करने के लिए [a-zA-Z]
भी लिख सकता हूं। ध्यान दें कि []
समूह प्रदान करते समय, वे आमतौर पर एक नया संदर्भ प्रस्तुत नहीं करते जिसे बाद में संदर्भित किया जा सकता है; आप उस के लिए कोष्ठक में उन्हें लपेटो करने ([a-zA-Z])
तो तरह होता है, अपने दो उदाहरण नियमित अभिव्यक्ति से मेल खाते हैं कि वे क्या में बराबर हैं, किंतु (a|b)
, मिलान चरित्र के लिए सबसे पहले उप मैच सेट हो जाएगा, जबकि [ab]
नहीं होगा सब-मैचों के लिए कोई संदर्भ बनाएं।
- 1. पर्ल और जावा रेगेक्स क्षमताओं के बीच अंतर क्या हैं?
- 2. रेगेक्स में^और \ ए, $ और \ Z के बीच क्या अंतर है?
- 3. # {} $ {} और% {} के बीच क्या अंतर है?
- 4. के बीच क्या अंतर है:। और: आर !?
- 5. [अपरिभाषित] और [,] के बीच क्या अंतर है?
- 6. पर्ल में रेगेक्स का उपयोग करते समय tr /// और s /// के बीच क्या अंतर है?
- 7. पर्ल रेगेक्स में \ 1 और $ 1 के बीच क्या अंतर है?
- 8. $ और $$ के बीच क्या अंतर है?
- 9. भिन्नता और '-' के बीच क्या अंतर है?
- 10. "$^एन" और "$ +" के बीच क्या अंतर है?
- 11. पायथन रेगेक्स - खोज के बीच अंतर और सभी
- 12. रेगेक्स अंतर: (\ w +)? और (\ w *)
- 13. के बीच क्या अंतर है?
- 14. MATLAB में & &&& के बीच क्या अंतर है?
- 15. अंतर और कहां के बीच क्या अंतर है?
- 16. क्या एक्सएसडी: पैटर्न और सी # रेगेक्स के बीच कोई अंतर है?
- 17. WinAPI में हैंडल और एचएफआईएलई के बीच क्या अंतर है?
- 18. सिम्फनी में रीडायरेक्ट और आगे के बीच क्या अंतर है?
- 19. PHP में iconv() और mb_convert_encoding() के बीच क्या अंतर है?
- 20. वेरिलोग में $ स्टॉप और $ फिनिश के बीच क्या अंतर है?
- 21. ember.js में, मिश्रण और विस्तार के बीच क्या अंतर है?
- 22. पर्ल में 'eq' और '= ~' के बीच क्या अंतर है?
- 23. गेब में, प्रदर्शित और वर्तमान के बीच क्या अंतर है?
- 24. गिट में लेखक और कमिटर के बीच क्या अंतर है?
- 25. आर में, अनलिंक और file.remove के बीच क्या अंतर है?
- 26. लिस्प में 'और #' के बीच क्या अंतर है?
- 27. इनलाइन और # परिभाषा के बीच अभ्यास में क्या अंतर है?
- 28. .NET में KeyValuePair और हैशटेबल के बीच क्या अंतर है?
- 29. Mercurial में, 'सिर' और 'शाखा' के बीच क्या अंतर है?
- 30. आरएसपीईसी में stub_model और mock_model के बीच क्या अंतर है?
() भी नाम के समूहों को निरूपित करने के लिए उपयोग किया जाता पुन: उपयोग –
@rexem के लिए, -, हां, अपनी टिप्पणी से पहले इस बारे में सोचा और संपादित यह :) – Peter
बस मुझे पंडिताऊ जा रहा है =) –