आपने RegEx के बारे में सुना होगा, जो रेगुलर एक्सप्रेशन का संक्षिप्त रूप है। यह डराने वाला लग सकता है, लेकिन एक बार जब आप पैटर्न का अर्थ समझ जाते हैं और एक वास्तविक एक्सप्रेशन कैसे बनाएं और उपयोग करें, तो यह इतना बुरा नहीं है। एक बार जब आप स्ट्रिंग्स और टेक्स्ट के बारे में अधिक अमूर्त तरीके से सोचने के आदी हो जाते हैं, तो यह डेटा के एक सेट में सामान्य पैटर्न खोजने वाली समस्याओं को हल करने के लिए एक उपयोगी टूल बन सकता है।
RegEx पैटर्न मिलान की एक विधि है: एक पैटर्न के आधार पर स्ट्रिंग्स या टेक्स्ट को फ़िल्टर करने का तरीका, आमतौर पर वांछित टेक्स्ट को निकालने और संशोधित करने के लिए। इस लेख में, हम चर्चा करेंगे कि रेगुलर एक्सप्रेशन का उपयोग कैसे करें और रूबी मेथड्स का उपयोग करके उन एक्सप्रेशन को कैसे टेस्ट करें ताकि उन्हें अपने प्रोजेक्ट के लिए अपने लॉजिक में शामिल किया जा सके।
रेगुलर एक्सप्रेशन को विज़ुअलाइज़ करने और समझने में अत्यधिक सहायक एक टूल Rubular नामक साइट है। पहले से भरे टेक्स्ट ब्लॉक का उपयोग करके RegEx का परीक्षण करने के लिए यहां लिंक पर क्लिक करें। आप देखेंगे कि दो फॉरवर्ड स्लैश के बीच 'neighbor' शब्द वाली एक स्ट्रिंग है।
यकीन मानें या न मानें, यह एक रेगुलर एक्सप्रेशन है! पूरे शब्द, वाक्य, पैराग्राफ तक तकनीकी रूप से रेगुलर एक्सप्रेशन कहलाए जा सकते हैं (जब तक वे दो फॉरवर्ड स्लैश के बीच हों)। Rubular वातावरण हमारे टेक्स्ट ब्लॉक में पैटर्न 'neighbor' के हर एक उदाहरण को हाइलाइट करता है - यहां तक कि वे उदाहरण भी जहां neighbor एक बड़े शब्द का हिस्सा है! उस ने कहा, आप किसी सटीक शब्द मिलान से अधिक अमूर्त कुछ खोजना चाह सकते हैं। यहीं पर मेटाकैरेक्टर काम आते हैं।
मेटाकैरेक्टर
रेगुलर एक्सप्रेशन का उपयोग अनुभवी प्रोग्रामर्स के लिए चुनौतीपूर्ण हो सकता है, इसलिए निराश न हों।
जिस तरह परमाणु हमारे आसपास की लगभग हर चीज के निर्माण खंड हैं, उसी तरह मेटाकैरेक्टर रेगुलर एक्सप्रेशन के निर्माण खंड हैं। जैसे-जैसे आप अपने रेगुलर एक्सप्रेशन में जोड़ते हैं, समग्र पैटर्न बदलता है। और जब समग्र पैटर्न बदलता है, तो आपके द्वारा उपयोग किए जाने वाले मेथड्स से मिलने वाले परिणाम अलग हो सकते हैं।
नीचे आपके रेगुलर एक्सप्रेशन को संशोधित करने के कई तरीके सूचीबद्ध हैं ताकि आप एक ऐसा पैटर्न ढूंढ सकें जो आपके लिए काम करे। फोन नंबर या ईमेल आदि के लिए रेगुलर एक्सप्रेशन लिखने का कोई एक बिल्कुल सही तरीका नहीं है - यह सब आपके प्रोजेक्ट की जरूरतों के बारे में है।
| मेटाकैरेक्टर | मिलान | उदाहरण |
|---|---|---|
| [abc] | एक कैरेक्टर क्लास जो स्ट्रिंग में एक सिंगल कैरेक्टर से मिलती है जो a, b या c हो सकता है | /[eig]/ neighbor, apple, या gate के हिस्सों से मिल सकता है |
| [^abc] | एक निगेटेड कैरेक्टर क्लास जो स्ट्रिंग में हर सिंगल कैरेक्टर से मिलती है सिवाय a, b या c के | /[^eig]/ neighbor, apple, या gate के हिस्सों से मिल सकता है |
| [a-z] | एक कैरेक्टर क्लास जो रेंज a-z में किसी भी सिंगल कैरेक्टर से मिलती है | /[e-i]/ neighbor, apple, या gate के हिस्सों में सिंगल कैरेक्टर से मिल सकता है |
| [a-zA-Z] | एक कैरेक्टर क्लास जो a-z या A-Z से कैरेक्टर की रेंज से मिलती है | /[e-i]/ "Hi neighbor!", Grapple, या gate के हिस्सों में सिंगल कैरेक्टर से मिल सकता है |
| ^ | लाइन की शुरुआत | /^Hello/ उन लाइनों से मिलता है जो 'Hello' से शुरू होती हैं |
| $ | लाइन का अंत | /Goodbye$/ उन लाइनों से मिलता है जो 'Goodbye' पर समाप्त होती हैं |
| \A | स्ट्रिंग की शुरुआत। '^' के समान, लेकिन बिना मल्टीलाइन मोड के | /\Aa/ 'apple' में 'a' से मिलता है, लेकिन 'apricot' में 'a' से नहीं क्योंकि यह स्ट्रिंग की शुरुआत नहीं है |
| \z | स्ट्रिंग का अंत। '$' के समान, लेकिन बिना मल्टीलाइन मोड के | /\za/ 'zebra' में 'a' से मिलता है, लेकिन 'libra' में 'a' से नहीं क्योंकि यह स्ट्रिंग का अंत नहीं है |
| . | वाइल्ड कार्ड। डॉट किसी भी कैरेक्टर से मिलता है। | /./ 'apple' में किसी भी सिंगल कैरेक्टर से मिलेगा |
| + | पिछले मेटाकैरेक्टर का एक या अधिक मिलान | /aa+/ 'aa', 'aaaaaaa' से मिलेगा लेकिन 'a' से नहीं क्योंकि यह पिछले मेटाकैरेक्टर (इस उदाहरण में दूसरा a) का एक या अधिक होना चाहिए |
| * | पिछले मेटाकैरेक्टर का शून्य या अधिक मिलान | /ab*/ 'a', 'ab', 'abbbbbb' से मिलेगा |
| \s | कोई भी व्हाइटस्पेस कैरेक्टर | /^The\s.+s$/ The Beatles, The Rolling Stones, The Cranberries आदि से मिलेगा |
| \S | कोई भी नॉन-व्हाइटस्पेस कैरेक्टर | /\S+/ The Beatles, The Rolling Stones, The Cranberries आदि से मिलेगा |
| \d | कोई भी डिजिट | /\d+/ 22, 33333, 0, आदि से मिलेगा |
| \D | कोई भी नॉन-डिजिट | /\D+/ 'Hello, goodbye' से मिलेगा |
| \w | कोई भी वर्ड कैरेक्टर | /ny\w*/ 'ny_152', 'nypost39', आदि से मिलेगा |
| \W | कोई भी नॉन-वर्ड कैरेक्टर | /\W+/ ')(*&^%$' से मिलेगा |
| a{3} | ठीक 3 'a' | /\d{3}-\d{3}-\d{4}/ 555-555-5555 से मिलेगा |
| a{3,} | तीन या अधिक 'a' | /[a-zA-Z0-9!#$^&*())]{8,}/ 'xE*BqRx14B7TAQp' से मिलेगा ⇐ जो पासवर्ड की तरह दिखता है! |
| a{3, 6} | तीन से छह 'a' | /[a-zA-Z0-9!#$^&*())]{8,32}/ '0XX!pC3Odpu30Qc' से मिलेगा क्योंकि यह 3 से अधिक और 32 से कम कैरेक्टर लंबाई में है |
| a? | 0 या 1 'a' | /\d?-\d{3}-\d{3}-\d{4}/ फ्रंट से जुड़े इंटरनेशनल कोड के साथ और बिना इंटरनेशनल कोड के फोन नंबर से मिलेगा |
वेबसाइटों पर फॉर्म भरने वाले उपयोगकर्ताओं के लिए सत्यापन के मामले में मेटाकैरेक्टर का उपयोग करना बहुत अच्छा है। हम यह सुनिश्चित करना चाहते हैं कि सही जानकारी दर्ज की गई है - यह एक एड्रेस या ईमेल या फोन नंबर के पैटर्न को सही प्रारूप में सुनिश्चित करने के लिए RegEx का एक बड़ा उपयोग होगा। यह कम उपयोगकर्ता त्रुटि के साथ बेहतर संगठित डेटाबेस की ओर ले जाता है जब नए खाते पंजीकृत किए जाते हैं।
रूबी में RegEx टेस्ट करने के मेथड्स
यह वह कोड है जिसका उपयोग हम scan और match के बीच अंतर करने के लिए करेंगे:
#!/usr/bin/ruby
class RegexTest
def initialize(str, regex)
@str = str
@regex = regex
@result = str.scan(regex)
end
def display_details()
puts "String = #@str"
puts "regex = #@regex"
puts "result = #@result"
end
end
# Create Objects
str1 = RegexTest.new("The rain in Spain stays mainly on the plain", /\w+ain/)
str2 = RegexTest.new("In Hertford, Hereford, and Hampshire, hurricanes hardly ever happen", /H\w+/)
# Call Methods
str1.display_details()
str2.display_details()
Scan
रूबी में scan मेथड उन सभी स्ट्रिंग्स का एक सरणी लौटाता है जो आपके रेगुलर एक्सप्रेशन से मेल खाते हैं:
str1: result = ["rain", "Spain", "main", "plain"]
str2: result = ["Hertford", "Hereford", "Hampshire"]
यह आपको परिणाम के साथ जो चाहें करने की अनुमति देता है।
RegExp Match
रेगुलर एक्सप्रेशन Match मेथड scan के बहुत, बहुत समान है, लेकिन सभी मिलानों के बजाय मिलान का पहला उदाहरण ढूंढता है। @result = str.scan(regex) को @result = str.match(regex) में बदलें अंतर देखने के लिए:
str1: result = rain
str2: result = Hertford
Match, हालांकि, एक <Matchdata> ऑब्जेक्ट लौटाता है। इसके साथ कुछ मेथड्स जुड़े हुए हैं जिनका उपयोग आप अपने परिणामों का उपयोग करते समय अपने लॉजिक में कर सकते हैं। अधिक जानकारी के लिए रूबी डॉक्स देखें।
Grep
Grep सरणियों में मिलान करने वाली स्ट्रिंग्स को खोजने के लिए एक एनुमरेबल मेथड है। यह उन सभी स्ट्रिंग्स की एक सरणी लौटाएगा जो आपके रेगुलर एक्सप्रेशन से मेल खाते हैं। हमारे पास जो कोड है, उसके साथ हमें यह सुनिश्चित करना होगा कि हमने जो स्ट्रिंग पास की है वह एक सरणी में विभाजित है।
इस कोड लाइन को बदलें:
@result = str.match(regex)
और इसे इसमें बदलें:
@result = str.split(/\s|,/).grep(regex);
आपको तब पहले परिणाम के समान परिणाम मिलेगा:
str1: result = ["rain", "Spain", "main", "plain"]
str2: result = ["Hertford", "Hereford", "Hampshire"]
Str =~ RegEx
बेसिक मिलान ऑपरेटर =~ का उपयोग करके, हम स्ट्रिंग की तुलना रेगुलर एक्सप्रेशन से कर सकते हैं और मिलान का पहला इंडेक्स लौटा सकते हैं। यदि कोई मिलान नहीं है तो यह nil लौटाएगा।
निष्कर्ष
इस लेख में, हमने चर्चा की कि रूबी में रेगुलर एक्सप्रेशन (RegEx) का उपयोग कैसे करें। यदि आप रूबी के साथ क्या बना सकते हैं इसके बारे में अधिक जानना चाहते हैं, तो हमारे लेख "रूबी कोड किसके लिए उपयोग किया जाता है?" देखें।
रूबी सीखने का बेहतर तरीका चाहते हैं? करियर कर्मा आपको आपके लिए सर्वोत्तम प्रशिक्षण कार्यक्रम खोजने में मदद करे।