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

"आणि आता मी तुम्हाला रेग्युलर एक्स्प्रेशन्सबद्दल सांगेन. हा विषय एकाच वेळी क्लिष्ट आणि सोपा आहे. रेग्युलर एक्स्प्रेशन्स नीट समजून घेण्यासाठी तुम्हाला दोन किंवा तीन भारी पुस्तके वाचावी लागतील, पण ती कशी वापरायची ते मी तुम्हाला शिकवू शकतो. ताबडतोब."

"अनुभवी प्रोग्रामरना विनोद करायला आवडते, जर तुम्हाला एखादी समस्या असेल आणि तुम्ही ती नियमित अभिव्यक्तीद्वारे सोडवणार आहात असे वाटत असेल, तर आता तुम्हाला दोन समस्या आहेत."

"हम्म."

"मला आशा आहे की मी तुला जास्त घाबरवले नाही, माझ्या मित्रा. नाही?"

"ठीक आहे, छान. तर, आमचा नवीन विषय म्हणजे रेग्युलर एक्सप्रेशन्स."

"आम्ही त्यांना जास्त सरलीकृत केल्यास, रेग्युलर एक्स्प्रेशन हे स्ट्रिंगचे नमुने आहेत."

"तुम्ही स्ट्रिंग दिलेल्या पॅटर्नशी जुळते की नाही ते तपासू शकता . तुम्ही डिलिमिटर किंवा पॅटर्न वापरून स्ट्रिंगला भागांमध्ये देखील विभाजित करू शकता."

"पण सोप्या गोष्टीपासून सुरुवात करूया: नमुना म्हणजे काय? "

"SQL मध्ये (परंतु Java मध्ये नाही), तुम्ही स्ट्रिंग विशिष्ट पॅटर्नशी जुळते का ते तपासू शकता. ते असे दिसते:"

name like 'Alex%'

येथे नाव हे व्हेरिएबल आहे, जसे की पॅटर्न तपासण्यासाठी कमांड आहे आणि "Alex%" हा नमुना आहे.

या प्रकरणात, % म्हणजे कोणतीही स्ट्रिंग किंवा सबस्ट्रिंग.

नमुना पॅटर्नशी जुळणारे स्ट्रिंग
'अ‍ॅलेक्स%' अॅलेक्स
अॅलेक्‍स आणि
अॅलेक्‍स अॅलेक्‍स अॅन्‍ड्रा
अॅलेक्‍स अॅन्ड्रा
….
'%x%' मा x
मा x इम
आले x आंद्र
'%a' ओल्ग आणि
हेलन आणि
इर

"SQL मध्‍ये, तुम्‍हाला केवळ एकच वर्ण असल्‍याचे नमूद करण्‍याची आवश्‍यकता असल्‍यास, तुम्‍ही अंडरस्‍कोर वर्ण वापराल: "_"."

नमुना पॅटर्नशी जुळणारे स्ट्रिंग
'अ‍ॅलेक्स%_' अॅलेक्स
अॅलेक्‍स आणि
अॅलेक्‍स अॅलेक्‍स अॅन्‍ड्रा
अॅलेक्‍स अॅन्ड्रा
….
'_x' Ax
Bx
Cx
'___' आआ
आब
बीबी

"त्याचा अर्थ होतो."

"ठीक आहे, मग रेग्युलर एक्स्प्रेशन्सकडे जाऊया."

"नियमित अभिव्यक्तींमध्ये सामान्यत: केवळ वर्णांच्या संख्येवरच नाही तर त्यांची 'सामग्री' देखील समाविष्ट असते. "कोणत्याही मुखवटामध्ये सहसा दोन (कधीकधी अधिक) भाग असतात: पहिला वर्ण 'प्राधान्य' वर्णन करतो आणि दुसरा वर्णांच्या संख्येचे वर्णन करतो. ."

"येथे काही सामग्री उदाहरणे आहेत:"

नमुना वर्णन उदाहरणे
. कोणतेही एक पात्र
\d कोणताही अंक
\D कोणताही अंक नसलेला सी
\s स्पेस, लाइन ब्रेक किंवा टॅब वर्ण '
\S स्पेस, टॅब आणि लाइन ब्रेक्स व्यतिरिक्त काहीही f
[az] a ते z पर्यंत कोणतेही अक्षर z
[०-९] 0 ते 9 पर्यंतचा कोणताही अंक. 8
\w कोणताही शब्द वर्ण c
\W कोणतेही शब्द नसलेले वर्ण _

"मला ते लगेच आठवत नाही, पण ते फार कठीण वाटत नाही."

"उत्कृष्ट, मग येथे मुखवटामधील वर्णांच्या संख्येची उदाहरणे आहेत: "

नमुना वर्णन उदाहरणे
ए? 'अ' वर्ण एकदाच येतो की नाही
B+ 'B' वर्ण एक किंवा अधिक वेळा येतो BBBB
क* 'C' वर्ण शून्य किंवा अधिक वेळा येतो CCC
D{n} 'D' वर्ण n वेळा येतो D{4} नमुना DDDD शी जुळतो
इ{n,} 'E' वर्ण n किंवा अधिक वेळा येतो नमुना E{2,} EEEEEEE शी जुळतो
F{n,m} 'F' वर्ण n आणि m च्या दरम्यान येतो नमुना E{2,4} EEEE शी जुळतो

"हे सर्व अगदी सरळ दिसते."

"तुम्ही सर्व काही इतक्या लवकर पकडत आहात. आता हे सर्व एकत्र कसे दिसते ते पाहूया:"

नमुना वर्णन उदाहरणे
[जाहिरात]? 'अ' आणि 'ड' मधील वर्ण एकदाच येतो किंवा नाही अ ब क ड
[bd,z]+ 'b', 'c', 'd', किंवा 'z' ही अक्षरे एक किंवा अधिक वेळा येतात b, bcdcdbdbdbdbzzzzbbzbzb, zbz
[१,७-९]* 1, 7, 8, किंवा 9 अंक शून्य किंवा अधिक वेळा येतात 1, 7, 9, 9777, 111199
1{5} अंक 1 5 वेळा येतो 11111
[१,२,अ,ब]{2} 1, 2, 'a' किंवा 'b' ही चिन्हे दोनदा येतात 11, 12, 1a, ab, 2b, bb, 22
[a,0]{2,3} 'a' किंवा 0 ही चिन्हे 2 किंवा 3 वेळा येतात aa, a0,00,0a, aaa,000, a00,0a0, a0a

"अजूनही सर्व स्पष्ट आहे."

"खरंच? हम्म. एकतर मी सर्वकाही नीट समजावून सांगितले आहे किंवा तू खूप लवकर आहेस. बरं, कोणत्याही प्रकारे, ते आमच्यासाठी चांगले आहे."

"तुमच्यासाठी येथे काही नवीन अंतर्दृष्टी आहेत."

"सबस्ट्रिंग्स शोधण्यासाठी रेग्युलर एक्सप्रेशन्सचा वापर केला जात असल्याने, आम्ही आमच्या पॅटर्नमध्ये आणखी दोन वर्ण (^ आणि $) जोडू शकतो."

"^ म्हणजे सबस्ट्रिंगमध्ये स्ट्रिंगची सुरुवात समाविष्ट असणे आवश्यक आहे."

"$ म्हणजे सबस्ट्रिंगमध्ये स्ट्रिंगचा शेवट समाविष्ट असणे आवश्यक आहे."

"येथे काही उदाहरणे आहेत:"

नमुना नमुन्याशी जुळणारे स्ट्रिंग आणि सबस्ट्रिंग
एक{3} aaaa  aaa  aaa  aaa  _
a{3}$ aaaa aaa aaa  aaa
^a{3} aaaa  aaa aaa aaa
^a{3}$ aaaa aaa aaa aaa

"आणि आणखी एक महत्त्वाचा मुद्दा."

"रेग्युलर एक्स्प्रेशनमध्ये, खालील वर्णांचा विशेष अर्थ आहे: [ ] \ / ^ $ . | ? * + ( ) { }. त्यांना नियंत्रण वर्ण म्हणतात. त्यामुळे, तुम्ही त्यांचा वापर फक्त स्ट्रिंगमध्ये करू शकत नाही."

"जावा कोड प्रमाणे, ते निसटले पाहिजेत. "आणि पुन्हा Java कोड प्रमाणे, यासाठी '\' वर्ण वापरला जातो."

"जर आपल्याला तीन '?' असलेल्या स्ट्रिंगचे वर्णन करायचे असेल तर? वर्ण, आम्ही '?{3}' लिहू शकत नाही, कारण '?' नियंत्रण वर्ण आहे. आम्हाला ते याप्रमाणे करावे लागेल: \?{3}. जर आम्हाला '\' वर्ण वापरायचा असेल, तर '\\' लिहावे लागेल."

"ठीक आहे, समजले."

"आणि आता येथे आणखी एक मनोरंजक टीडबिट आहे. Java कोड असलेल्या फायलींमध्ये, '\' वर्ण देखील स्ट्रिंगमध्ये एस्केप करणे आवश्यक आहे, कारण ते एक नियंत्रण वर्ण आहे."

"नक्कीच."

"म्हणून, जर तुम्ही जावा रेग्युलर एक्सप्रेशन स्ट्रिंगमध्ये परिभाषित करण्याचा प्रयत्न करत असाल, तर तुम्हाला '\' अक्षर दोनदा सोडावे लागेल."

"हे एक उदाहरण आहे:"

मला 'c:\anything'शी जुळणारा मुखवटा हवा आहे
सिद्धांतानुसार, रेग्युलर एक्स्प्रेशन यासारखे दिसले पाहिजे:
एक 'c' वर्ण,
कोलन,
बॅकस्लॅश,
पीरियड आणि तारका (अक्षरांची संख्या दर्शवण्यासाठी). मी वाचनीयता सुधारण्यासाठी मोकळी जागा जोडली:
c : \ .*
परंतु '\' आणि '.' वर्ण. एस्केप करणे आवश्यक आहे, त्यामुळे रेग्युलर एक्सप्रेशन असे दिसेल:
c :   \\ \. *
किंवा, रिक्त स्थानांशिवाय
c: \\ \. *
"आमच्या रेग्युलर एक्स्प्रेशनमध्ये तीन बॅकस्लॅश असावेत.
याचा अर्थ असा की जावा फाइलमध्ये रेग्युलर एक्स्प्रेशन असे दिसेल:"
String regexp="c: \\\\ \\. *";

"व्वा! व्वा. आता मला कळले."

"आणि जर तुम्ही यात खोलवर जाण्याचा निर्णय घेतला तर, येथे काही चांगले दुवे आहेत:"

विकिपीडियावरील धडा