Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Ruby

रूबी में नियमित अभिव्यक्ति में महारत हासिल करना:एक व्यावहारिक मार्गदर्शिका

<पी> आपने रेगएक्स के बारे में सुना होगा, जो रेगुलर एक्सप्रेशन का संक्षिप्त रूप है। यह आपको डराने वाला लग सकता है, लेकिन एक बार जब आपको इसकी आदत हो जाए कि पैटर्न का क्या मतलब है और वास्तविक अभिव्यक्ति कैसे बनाई जाए और उसका उपयोग कैसे किया जाए तो यह उतना बुरा नहीं है। एक बार जब आप स्ट्रिंग्स और टेक्स्ट के बारे में अधिक अमूर्त तरीके से सोचने के आदी हो जाते हैं, तो यह उन समस्याओं को हल करने के लिए एक उपयोगी उपकरण हो सकता है जहां आप डेटा के सेट में सामान्य पैटर्न की तलाश कर रहे हैं। 
<पी> रेगएक्स पैटर्न मिलान की एक विधि है:पैटर्न के आधार पर स्ट्रिंग्स या टेक्स्ट को फ़िल्टर करने का एक तरीका, आमतौर पर वांछित टेक्स्ट को निकालने और संशोधित करने के लिए। इस लेख में, हम चर्चा करेंगे कि रेगुलर एक्सप्रेशन का उपयोग कैसे करें और अपने प्रोजेक्ट के लिए अपने तर्क में शामिल करने के लिए रूबी विधियों का उपयोग करके उन अभिव्यक्तियों का परीक्षण कैसे करें।
<पी> एक उपकरण जो रेगएक्स को देखने और समझने में बेहद मददगार है, वह रूबुलर नामक साइट है। पहले से भरे गए टेक्स्ट के ब्लॉक का उपयोग करके रेगेक्स का परीक्षण करने के लिए यहां लिंक पर क्लिक करें। आप देखेंगे कि दो फॉरवर्ड स्लैश के बीच में 'पड़ोसी' शब्द के साथ एक स्ट्रिंग है। 
<पी> मानो या न मानो, यह एक नियमित अभिव्यक्ति है! संपूर्ण शब्दों, वाक्यों, पैराग्राफों को भी तकनीकी रूप से नियमित अभिव्यक्ति कहा जा सकता है (जब तक वे दो फॉरवर्ड स्लैश के बीच में हों)। रूबुलर वातावरण हमारे पाठ के ब्लॉक में 'पड़ोसी' पैटर्न के हर एक उदाहरण को उजागर करता है - यहां तक ​​​​कि ऐसे उदाहरण भी जहां पड़ोसी एक बड़े शब्द का हिस्सा है! ऐसा कहा जा रहा है कि, आप सटीक शब्द मिलान की तुलना में कुछ अधिक सारगर्भित चीज़ ढूंढना चाहेंगे। यहीं पर मेटाकैरेक्टर आते हैं।

मेटाकैरेक्टर्स

रूबी में नियमित अभिव्यक्ति में महारत हासिल करना:एक व्यावहारिक मार्गदर्शिका RegEx का उपयोग अनुभवी प्रोग्रामर के लिए चुनौतीपूर्ण हो सकता है, इसलिए निराश न हों। <पी> जिस प्रकार परमाणु लगभग हर चीज के निर्माण खंड हैं जो हम चारों ओर देखते हैं, मेटाकैरेक्टर नियमित अभिव्यक्तियों के निर्माण खंड हैं। जैसे ही आप अपनी नियमित अभिव्यक्ति जोड़ते हैं, समग्र पैटर्न बदल जाता है। और जब समग्र पैटर्न बदलता है, तो आपके द्वारा उपयोग की जाने वाली विधियों से प्राप्त परिणाम भिन्न हो सकते हैं। 
<पी> आपके रेगुलर एक्सप्रेशन को संशोधित करने के कई तरीके नीचे सूचीबद्ध हैं ताकि आप एक ऐसा पैटर्न ढूंढ सकें जो आपके लिए काम करे। कोई भी व्यक्ति बिल्कुल सही नहीं है फ़ोन नंबर या ईमेल आदि के लिए रेगुलर एक्सप्रेशन लिखने का तरीका - यह आपके प्रोजेक्ट के लिए आपकी ज़रूरतों के बारे में है।  MetacharacterMatchesExample[abc]एक वर्ण वर्ग जो स्ट्रिंग में एकल वर्ण से मेल खाता है जो a, b या c हो सकता है
/[eig]/ पड़ोसी, सेब, या गेट के हिस्सों से मेल खा सकता है[^abc] एक अस्वीकृत वर्ण वर्ग जो स्ट्रिंग में हर एक वर्ण से मेल खाता है लेकिन a, b या c/[^eig]/ पड़ोसी, सेब, या गेट के हिस्सों से मेल खा सकता है[a-z] एक वर्ण वर्ग जो a-z/[e-i]/ की सीमा में किसी एकल वर्ण से मेल खाता है, पड़ोसी, सेब, या गेट के हिस्सों में एकल वर्ण से मेल खा सकता है
[a-zA-Z] एक वर्ण वर्ग जो a-z या A-Z से वर्णों की श्रेणी से मेल खाता है
/[e-i]/ "हाय पड़ोसी!", ग्रैपल, या गेट^ लाइन की शुरुआत/^हैलो/ उन पंक्तियों से मेल खा सकता है जो 'हैलो' से शुरू होती हैं$लाइन का अंत/अलविदा$/ 'अलविदा' पर खत्म होने वाली लाइनों से मेल खाता है\स्ट्रिंग की शुरुआत। '^' के समान, लेकिन बिना मल्टीलाइन मोड के/\Aa/ सेब में 'ए' से मेल खाता है, लेकिन खुबानी में 'ए' से नहीं क्योंकि यह स्ट्रिंग की शुरुआत नहीं है:
सेब
खुबानी\z स्ट्रिंग का अंत. '$' के समान, लेकिन बिना मल्टीलाइन मोड के/\za/ ज़ेबरा में 'ए' से मेल खाता है, लेकिन तुला में 'ए' से नहीं क्योंकि यह स्ट्रिंग का अंत नहीं है
लाइब्राजेब्रा.वाइल्ड कार्ड. बिंदु किसी भी वर्ण से मेल खाता है. /./ ऐप्पल में किसी एक कैरेक्टर से मेल खाएगा+पिछले मेटाकैरेक्टर में से एक या अधिक से मेल खाता है/एए+/ 'आ', 'आआआआआ' से मेल खाएगा लेकिन 'ए' से मेल नहीं खाएगा क्योंकि यह पिछले मेटाकैरेक्टर में से एक या अधिक होना चाहिए (जो इस उदाहरण में दूसरा है ए)*पिछले मेटाकैरेक्टर के शून्य या अधिक से मेल खाता है/एबी*/ 'ए', 'एबी', 'एबीबीबीबीबी'\sकोई भी खाली जगह से मेल खाएगा चरित्र/^The\s.+s$/ द बीटल्स से मेल खाएगा , द रोलिंग स्टोन्स, द क्रैनबेरीज़, आदि \SAकोई भी गैर-व्हाट्सएप वर्ण/\S+/ द बीटल्स से मेल खाएगा , द रोलिंग स्टोन्स, द क्रैनबेरीज़, आदि \dकोई भी अंक/\d+/ 22, 33333, 0 आदि से मेल खाएगा\Dकोई भी गैर-अंक/\D+/ 'हैलो, अलविदा' से मेल खाएगा\wकोई भी शब्द वर्ण/ny\w*/ 'ny_152', 'nypost39', आदि से मेल खाएगा\WAकोई भी गैर-शब्द वर्ण/\W+/ 'से मेल खाएगा)(*&^%$'a{3}बिल्कुल 3 में से 'a'/\d{3}-\d{3}-\d{4}/ 555-555-5555a से मेल खाएगा{3,}'a'/[a-zA-Z0-9!#$^&*)(]{8,}/ के तीन या अधिक 'xE*BqRx14B7TAQp' से मेल खाएंगे ⇐ ऐसा लगता है कि इसे पासवर्ड के रूप में इस्तेमाल किया जा सकता है!a{3, 6}तीन से 'a'/[a-zA-Z0-9!#$^&*)(]{8,32}/ का छह भाग '0XX!pC3Odpu30Qc' से मेल खाएगा क्योंकि इसकी लंबाई 3 से अधिक और 32 से कम है? सामने की ओर.  <पी> जब उपयोगकर्ताओं द्वारा वेबसाइटों पर फॉर्म भरने की बात आती है तो सत्यापन के लिए मेटाएक्टर का उपयोग करना बहुत अच्छा होता है। हम यह सुनिश्चित करना चाहते हैं कि सही जानकारी दर्ज की गई है - यह सुनिश्चित करने के लिए कि किसी पते या ईमेल या फोन नंबर का पैटर्न सही प्रारूप है, यह रेगेक्स का एक अच्छा उपयोग होगा। इससे नए खातों को पंजीकृत करते समय कम उपयोगकर्ता त्रुटि के साथ बेहतर व्यवस्थित डेटाबेस प्राप्त होता है। 

रूबी में रेगेक्स का परीक्षण करने के तरीके

<पी> यहां वह कोड है जिसका उपयोग हम स्कैन और मिलान के बीच अंतर करने के लिए करने जा रहे हैं:
#!/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()
<पी> स्कैन करें

<पी> रूबी में स्कैन विधि आपकी नियमित अभिव्यक्ति से मेल खाने वाली सभी स्ट्रिंग्स की एक सरणी लौटाती है:
<पी> str1:result = ["rain", "Spain", "main", "plain"] <पी> str2:result = ["Hertford", "Hereford", "Hampshire"]
<पी> यह आपको परिणाम के साथ जो चाहें करने की अनुमति देता है।
<पी> रेगएक्सपी मैच <पी> रेगुलर एक्सप्रेशन मैच विधि स्कैन के बहुत समान है, लेकिन सभी मैचों के बजाय मैच का पहला उदाहरण ढूंढती है। अंतर देखने के लिए @result =str.scan(regex) को @result =str.match(regex) में बदलें: 
<पी> str1:result = rain <पी> str2:result = Hertford
<पी> हालाँकि, मैच एक <मैचडेटा> ऑब्जेक्ट लौटाता है। इसके साथ कुछ विधियाँ जुड़ी हुई हैं जिनका उपयोग आपके परिणामों का उपयोग करते समय आपके तर्क में किया जा सकता है। आप वहां क्या उपयोग कर सकते हैं, इसके बारे में अधिक जानकारी के लिए रूबी डॉक्स पर एक नज़र डालें। 
<पी> ग्रेप

<पी> ग्रेप सरणियों में मिलान स्ट्रिंग खोजने के लिए एक गणना योग्य विधि है। यह आपके रेगुलर एक्सप्रेशन से मेल खाने वाली सभी स्ट्रिंग्स की एक सरणी लौटाएगा। हमारे पास मौजूद कोड के साथ, हमें यह सुनिश्चित करना होगा कि जिस स्ट्रिंग को हमने पास किया है वह एक सरणी में विभाजित हो गई है। 
<पी> ऐसा करने के लिए कोड की इस पंक्ति को बदलें:

<पी> @result = str.match(regex) <पी> और इसे इसमें बदलें:

<पी> @result = str.split(/\s|,/).grep(regex);
<पी> रूबी में नियमित अभिव्यक्ति में महारत हासिल करना:एक व्यावहारिक मार्गदर्शिका

<पी> "कैरियर कर्म ने मेरे जीवन में तब प्रवेश किया जब मुझे इसकी सबसे अधिक आवश्यकता थी और बूटकैंप ने तुरंत मेरी मदद की। स्नातक होने के दो महीने बाद, मुझे अपना सपनों का काम मिला जो जीवन में मेरे मूल्यों और लक्ष्यों के अनुरूप था!"

<पी> वीनस, रॉकबॉट में सॉफ्टवेयर इंजीनियर

<पी> अपना बूटकैंप मैच ढूंढें

<पी> फिर आपको पहले परिणाम के समान परिणाम मिलेगा: 
<पी> str1:result = ["rain", "Spain", "main", "plain"] <पी> str2:result = ["Hertford", "Hereford", "Hampshire"]
<पी> Str =~RegEx

<पी> =~का उपयोग करना बुनियादी मिलान ऑपरेटर, हम स्ट्रिंग की तुलना रेगुलर एक्सप्रेशन से कर सकते हैं और मैच का पहला इंडेक्स लौटा सकते हैं। यदि कोई मिलान नहीं है तो यह शून्य वापस आ जाएगा। 

निष्कर्ष

<पी> इस लेख में, हमने चर्चा की कि रूबी में रेगुलर एक्सप्रेशन (RegEx) का उपयोग कैसे करें। यदि आप इस बारे में अधिक जानना चाहते हैं कि आप रूबी के साथ क्या बना सकते हैं, तो हमारा लेख देखें, ''रूबी कोड का उपयोग किस लिए किया जाता है?
<पी> रूबी सीखने का बेहतर तरीका चाहते हैं? करियर कर्मा को आपके लिए सर्वोत्तम प्रशिक्षण कार्यक्रम ढूंढने में मदद करने दें

  1. जावास्क्रिप्ट के साथ वर्तमान तत्व में एक सक्रिय वर्ग कैसे जोड़ें? जावास्क्रिप्ट के साथ वर्तमान तत्व में एक सक्रिय वर्ग कैसे जोड़ें?

    जावास्क्रिप्ट के साथ वर्तमान तत्व में एक सक्रिय वर्ग जोड़ने के लिए, कोड इस प्रकार है - उदाहरण <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width, initial-scale=1" /> <style>    .btn {       border

  1. ढेर जोड़ना ढेर जोड़ना

    पेयरिंग हीप को अपेक्षाकृत आसान कार्यान्वयन और शानदार व्यावहारिक परिशोधन प्रदर्शन के साथ हीप डेटा संरचना के प्रकार के रूप में परिभाषित किया गया है। पेयरिंग हीप्स हीप-आर्डर्ड मल्टीवे ट्री संरचनाएं हैं, और इन्हें सरलीकृत फाइबोनैचि हीप्स के रूप में दर्शाया जा सकता है। प्राइम के एमएसटी एल्गोरिथम जैसे ए

  1. एंड्रॉइड फोन मॉडल को प्रोग्रामेटिक रूप से कैसे जांचें? एंड्रॉइड फोन मॉडल को प्रोग्रामेटिक रूप से कैसे जांचें?

    यह उदाहरण दिखाता है कि एंड्रॉइड फोन मॉडल को प्रोग्रामेटिक रूप से कैसे जांचें। चरण 1 - एंड्रॉइड स्टूडियो में एक नया प्रोजेक्ट बनाएं, फाइल ⇒ न्यू प्रोजेक्ट पर जाएं और एक नया प्रोजेक्ट बनाने के लिए सभी आवश्यक विवरण भरें। चरण 2 - निम्न कोड को res/layout/activity_main.xml में जोड़ें। चरण 3 - निम्न