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

रूबी में रेगुलर एक्सप्रेशन में महारत: एक व्यावहारिक गाइड

आपने 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) का उपयोग कैसे करें। यदि आप रूबी के साथ क्या बना सकते हैं इसके बारे में अधिक जानना चाहते हैं, तो हमारे लेख "रूबी कोड किसके लिए उपयोग किया जाता है?" देखें।

रूबी सीखने का बेहतर तरीका चाहते हैं? करियर कर्मा आपको आपके लिए सर्वोत्तम प्रशिक्षण कार्यक्रम खोजने में मदद करे।

  1. HTML DOM इनपुट बटन type प्रॉपर्टी HTML DOM इनपुट बटन type प्रॉपर्टी

    HTML DOM इनपुट बटन type प्रॉपर्टी इनपुट बटन का प्रकार रिटर्न करती है यानी यह “button”, “submit” या “reset” प्रकार का है या नहीं।सिंटैक्सनिम्नलिखित सिंटैक्स है −object.typeउदाहरणआइए इनपुट बटन type प्रॉपर्टी का एक उदाहरण देखें −<!DOCTYPE html> <

  1. JavaScript में setInterval() को कुछ समय या क्रियाओं की संख्या के बाद रोकना JavaScript में setInterval() को कुछ समय या क्रियाओं की संख्या के बाद रोकना

    कुछ समय बाद रोकने के लिए कुछ शर्तों का उपयोग करें।नीचे दिया गया कोड आधे मिनट में रुक जाएगा।उदाहरणकोड निम्न है:<!DOCTYPE html> <html lang=en> <head>    <meta charset=UTF-8>    <meta name=viewport content=width=device-width, initial-scale=1.0>   &

  1. Python में Pygal का उपयोग करके डॉट प्लॉट कैसे उत्पन्न करें? Python में Pygal का उपयोग करके डॉट प्लॉट कैसे उत्पन्न करें?

    डेटा को विज़ुअलाइज़ करना एक महत्वपूर्ण कदम है क्योंकि यह जटिल अंतर्निहित कार्य को देखे बिना और जटिल गणना किए बिना डेटा में क्या चल रहा है, यह समझने में मदद करता है। Pygal एक ओपन-सोर्स Python पैकेज है जो इंटरैक्टिव प्लॉट्स और ग्राफ़ के SVG (स्केलर वेक्टर ग्राफ़िक्स) छवियों के निर्माण में मदद करता है।