रेगुलर एक्सप्रेशन (उदाहरण के साथ) - 1

"और अब मैं आपको रेगुलर एक्सप्रेशन के बारे में बताऊँगा। यह विषय एक ही समय में जटिल और सरल दोनों है। रेगुलर एक्सप्रेशन को पूरी तरह से समझने के लिए, आपको दो या तीन मोटी किताबें पढ़ने की आवश्यकता हो सकती है, लेकिन मैं आपको उनका उपयोग करना सिखा सकता हूँ अभी।"

"अनुभवी प्रोग्रामर मजाक करना पसंद करते हैं, अगर आपको कोई समस्या है और आप सोचते हैं कि आप इसे नियमित अभिव्यक्ति के साथ हल करने जा रहे हैं, तो अब आपके पास दो समस्याएं हैं।"

"हम्म।"

"मुझे आशा है कि मैंने तुम्हें बहुत ज्यादा नहीं डरा दिया, मेरे दोस्त। नहीं?"

"ठीक है, अच्छा। तो, हमारा नया विषय रेगुलर एक्सप्रेशंस है।"

"अगर हम उन्हें अधिक सरल करते हैं, तो नियमित अभिव्यक्ति स्ट्रिंग्स के लिए पैटर्न हैं।"

"आप जांच सकते हैं कि कोई स्ट्रिंग किसी दिए गए पैटर्न से मेल खाता है या नहीं। आप डिलीमीटर या पैटर्न का उपयोग करके स्ट्रिंग को भागों में विभाजित भी कर सकते हैं।"

"लेकिन चलो कुछ सरल से शुरू करते हैं: पैटर्न क्या है? "

"एसक्यूएल में (लेकिन जावा में नहीं), आप जांच सकते हैं कि स्ट्रिंग एक विशेष पैटर्न से मेल खाती है या नहीं। यह इस तरह दिखता है:"

name like 'Alex%'

यहाँ नाम एक चर है, जैसे एक पैटर्न की जाँच करने के लिए एक कमांड है, और "एलेक्स%" पैटर्न है।

इस स्थिति में, % का अर्थ है कोई स्ट्रिंग या सबस्ट्रिंग।

नमूना पैटर्न से मेल खाते हुए तार
'एलेक्स%' एलेक्स
एलेक्स एंडर
एलेक्स एंडर
एलेक्स एंड्रा
…।
'%एक्स%' मा एक्स
मा एक्स आईएम
अली एक्स और आर
'%ए' ओल्ग और
हेलेन और
एक … _

"एसक्यूएल में, यदि आपको यह निर्दिष्ट करने की आवश्यकता है कि केवल एक अन्य वर्ण होना चाहिए, तो आप अंडरस्कोर वर्ण का उपयोग करेंगे: "_"।

नमूना पैटर्न से मेल खाते हुए तार
'एलेक्स%_' एलेक्स
एलेक्स एंडर
एलेक्स एंडर
एलेक्स एंड्रा
…।
'_एक्स' एक्स
बीएक्स
सीएक्स
'___'
आब
बब्ब

"यह समझ आता है।"

"ठीक है, तो चलिए रेगुलर एक्सप्रेशन पर चलते हैं।"

"नियमित अभिव्यक्तियों में न केवल वर्णों की संख्या, बल्कि उनकी 'सामग्री' पर भी प्रतिबंध शामिल है।" "

"यहाँ कुछ सामग्री उदाहरण हैं:"

नमूना विवरण उदाहरण
. कोई एक पात्र 1
\डी कोई अंक 7
\डी कोई भी गैर-अंक सी
\एस स्पेस, लाइन ब्रेक या टैब कैरेक्टर ''
\एस स्पेस, टैब और लाइन ब्रेक के अलावा कुछ भी एफ
[एजेड] A से Z तक कोई भी अक्षर जेड
[0-9] 0 से 9 तक कोई भी अंक। 8
\w कोई भी शब्द वर्ण सी
\ डब्ल्यू कोई भी गैर-शब्द वर्ण _

"मैं उन्हें तुरंत याद नहीं रखूंगा, लेकिन यह बहुत कठिन नहीं लगता है।"

"उत्कृष्ट, तो यहाँ एक मुखौटा में वर्णों की संख्या के उदाहरण हैं: "

नमूना विवरण उदाहरण
ए? अक्षर 'ए' एक बार आता है या बिल्कुल नहीं
बी + अक्षर 'बी' एक या अधिक बार आता है बीबीबीबी
सी* वर्ण 'सी' शून्य या अधिक बार आता है सीसीसी
डी {एन} वर्ण 'D' n बार आता है पैटर्न डी{4} डीडीडीडी से मेल खाता है
ई {एन,} वर्ण 'ई' n या अधिक बार आता है पैटर्न E{2,} EEEEEEE से मेल खाता है
एफ {एन, एम} वर्ण 'F' n और m बार के बीच होता है पैटर्न E{2,4} EEEE से मेल खाता है

"यह सब बहुत सीधा लगता है।"

"आप हर चीज़ को इतनी जल्दी पकड़ रहे हैं। अब देखते हैं कि यह सब एक साथ कैसा दिखता है:"

नमूना विवरण उदाहरण
[विज्ञापन]? 'ए' और 'डी' के बीच एक वर्ण एक बार या बिल्कुल नहीं होता है ए बी सी डी
[बीडी, जेड] + अक्षर 'बी', 'सी', 'डी' या 'जेड' एक या अधिक बार आते हैं बी, बीसीडीसीडीबीडीबीडीबीजेडबीजेबीबीजेडबी, जेडबीजेड
[1,7-9]* अंक 1, 7, 8, या 9 शून्य या अधिक बार आते हैं 1, 7, 9, 9777, 111199
1{5} अंक 1 5 बार आता है 11111
[1,2,ए,बी]{2} प्रतीक 1, 2, 'a', या 'b' दो बार आते हैं 11, 12, 1ए, एबी, 2बी, बीबी, 22
[ए, 0] {2,3} प्रतीक 'a' या 0 2 या 3 बार आते हैं आ, ए0,00,0ए, आआ,000, ए00,0ए0, ए0ए

"अभी भी सब साफ है।"

"वास्तव में? हम्म। या तो मैंने सब कुछ वास्तव में अच्छी तरह से समझाया है या आप बहुत तेज हैं। खैर, किसी भी तरह से, यह हमारे लिए अच्छा है।"

"यहां आपके लिए कुछ नई जानकारियां हैं।"

"चूंकि नियमित अभिव्यक्तियों का उपयोग अक्सर सबस्ट्रिंग खोजने के लिए किया जाता है, इसलिए हम अपने पैटर्न में दो और वर्ण (^ और $) जोड़ सकते हैं।"

"^ का अर्थ है कि सबस्ट्रिंग में स्ट्रिंग की शुरुआत शामिल होनी चाहिए।"

"$ का अर्थ है कि सबस्ट्रिंग में स्ट्रिंग का अंत शामिल होना चाहिए।"

"यहां कुछ उदाहरण दिए गए हैं:"

नमूना स्ट्रिंग और सबस्ट्रिंग जो पैटर्न से मेल खाते हैं
एक{3} आ आ  आ   आ आ 
एक{3}$ आ आ आ आ आ आ 
^ए{3} आ आ  आ आ आ आ आ
^ए{3}$ आ आ आ आ आ आ आ

"और एक और महत्वपूर्ण बिंदु।"

"रेगुलर एक्सप्रेशन में, निम्नलिखित वर्णों का विशेष अर्थ होता है: [ ] \ / ^ $ । | ? * + ( ) { }। उन्हें नियंत्रण वर्ण कहा जाता है। इसलिए, आप उन्हें केवल स्ट्रिंग्स में उपयोग नहीं कर सकते।"

"जावा कोड के रूप में, उन्हें बचा जाना चाहिए। "और फिर से जावा कोड के रूप में, इसके लिए '\' वर्ण का उपयोग किया जाता है।"

"अगर हम तीन '?' से मिलकर एक स्ट्रिंग का वर्णन करना चाहते हैं अक्षर, हम '?{3}' नहीं लिख सकते, क्योंकि '?' एक नियंत्रण वर्ण है। हमें इसे इस तरह करने की आवश्यकता है: \?{3}। यदि हम '\' वर्ण का उपयोग करना चाहते हैं, तो हमें '\\' लिखना होगा।"

"ठीक मिल गया।"

"और अब यहाँ एक और दिलचस्प tidbit है। जावा कोड वाली फ़ाइलों में, '\' वर्ण को स्ट्रिंग्स में भी बचा जाना चाहिए, क्योंकि यह एक नियंत्रण वर्ण है।"

"बिल्कुल।"

"इसलिए, यदि आप स्ट्रिंग में जावा नियमित अभिव्यक्ति को परिभाषित करने का प्रयास कर रहे हैं, तो आपको दो बार '\' वर्ण से बचने की आवश्यकता है।"

"यहाँ एक उदाहरण है:"

मुझे एक ऐसा मास्क चाहिए जो 'c:\anything' से मेल खाता हो
सिद्धांत रूप में, नियमित अभिव्यक्ति इस तरह दिखनी चाहिए:
एक 'सी' वर्ण,
कोलन,
बैकस्लैश,
अवधि, और तारांकन (वर्णों की किसी भी संख्या को दर्शाने के लिए)। मैंने पठनीयता में सुधार के लिए रिक्त स्थान जोड़े:
c : \ *
लेकिन वर्ण '\' और '।' बचने की जरूरत है, इसलिए नियमित अभिव्यक्ति इस तरह दिखेगी:
c :   \\ \। *
या, रिक्त स्थान के बिना
c: \\ \। *
"हमें अपनी नियमित अभिव्यक्ति में तीन बैकस्लैश होने चाहिए।
इसका मतलब है कि जावा फ़ाइल में नियमित अभिव्यक्ति इस तरह दिखेगी:"
String regexp = "c: \\\\ \\. *";

"वाह! वाह। अब मुझे पता है।"

"और यदि आप इसमें गहराई तक जाने का निर्णय लेते हैं, तो यहां कुछ अच्छे लिंक हैं:"

विकिपीडिया पर पाठ