Rust में रेगुलर एक्सप्रेशन: व्यावहारिक उदाहरणों के साथ

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Rust में रेगुलर एक्सप्रेशन: व्यावहारिक उदाहरणों के साथ

\n\n

रेगुलर एक्सप्रेशन (regex) टेक्स्ट के साथ काम करने का एक शक्तिशाली टूल है। Rust में, सख्त टाइपिंग और सुरक्षा पर फोकस के बावजूद, regex क्रेट की बदौलत रेगुलर एक्सप्रेशन के साथ काम करना कुशल और सुविधाजनक है। इस लेख में, हम Rust में रेगुलर एक्सप्रेशन का व्यावहारिक उपयोग समझेंगे: इंस्टॉलेशन से लेकर जटिल स्ट्रिंग प्रोसेसिंग तक।

\n\n

हम मुख्य ऑपरेशनों को कवर करेंगे: सर्च, एक्सट्रैक्शन, रिप्लेस और वैलिडेशन। सभी कोड उदाहरण Rust में लिखे गए हैं और उपयोग के लिए तैयार हैं।

\n\n

regex क्रेट की स्थापना और कनेक्शन

\n\n

Rust में रेगुलर एक्सप्रेशन के साथ काम करने के लिए, एक तृतीय-पक्ष लेकिन बहुत लोकप्रिय क्रेट regex का उपयोग किया जाता है। यह मानक लाइब्रेरी का हिस्सा नहीं है, इसलिए इसे प्रोजेक्ट में जोड़ना होगा।

\n\n

Cargo.toml फ़ाइल में डिपेंडेंसी जोड़ें:

\n\n
[dependencies]\nregex = "1"
\n\n

इसके बाद, कोड में मुख्य टाइप्स को इम्पोर्ट किया जा सकता है:

\n\n
use regex::Regex;
\n\n

regex क्रेट रेगुलर एक्सप्रेशन को एक फाइनाइट ऑटोमेटन में कंपाइल करता है, जो उच्च प्रदर्शन सुनिश्चित करता है। पैटर्न कंपाइलेशन की त्रुटियाँ रनटाइम पर (Result के माध्यम से) पकड़ी जाती हैं, जो कोड को विश्वसनीय बनाती हैं।

\n\n

मूल बातें: स्ट्रिंग में मिलान खोजना

\n\n

यह जाँचने का सबसे सरल तरीका कि स्ट्रिंग पैटर्न से मेल खाती है या नहीं, is_match मेथड का उपयोग करना है। आइए टेक्स्ट में ईमेल पते की उपस्थिति की जाँच का उदाहरण देखें।

\n\n
use regex::Regex;\n\nfn main() {\n    let re = Regex::new(r"\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Z|a-z]{2,}\\b").unwrap();\n    let text = "हमसे support@example.com पर संपर्क करें।";\n\n    if re.is_match(text) {\n        println!("ईमेल मिल गया!");\n    } else {\n        println!("ईमेल नहीं मिला।");\n    }\n}
\n\n

Regex::new मेथड पैटर्न के साथ एक स्ट्रिंग लेता है और Result लौटाता है। सरलता के लिए यहाँ unwrap() का उपयोग किया गया है, लेकिन प्रोडक्शन कोड में त्रुटियों को सही ढंग से संभालना चाहिए।

\n\n

सभी मिलान खोजने के लिए find_iter मेथड का उपयोग किया जाता है, जो Match ऑब्जेक्ट्स पर एक इटरेटर लौटाता है:

\n\n
use regex::Regex;\n\nfn main() {\n    let re = Regex::new(r"\\d+").unwrap();\n    let text = "कीमतें: 100, 250 और 500 रुपये।";\n\n    for mat in re.find_iter(text) {\n        println!("संख्या मिली: {}", mat.as_str());\n    }\n}
\n\n

यह कोड आउटपुट देगा:

\n\n
संख्या मिली: 100\nसंख्या मिली: 250\nसंख्या मिली: 500
\n\n

कैप्चरिंग ग्रुप्स के साथ डेटा निकालना

\n\n

कैप्चरिंग ग्रुप्स (capturing groups) आपको पूरे मिलान के बजाय उसके अलग-अलग हिस्सों को निकालने की अनुमति देते हैं। उदाहरण के लिए, "दिन-महीना-साल" प्रारूप में दिनांक को पार्स करना।

\n\n
use regex::Regex;\n\nfn main() {\n    let re = Regex::new(r"(\\d{2})-(\\d{2})-(\\d{4})").unwrap();\n    let text = "आज 15-03-2024 है।";\n\n    if let Some(caps) = re.captures(text) {\n        println!("दिन: {}", &caps[1]);\n        println!("महीना: {}", &caps[2]);\n        println!("साल: {}", &caps[3]);\n    }\n}
\n\n

ग्रुप्स की इंडेक्सिंग 1 से शुरू होती है (ग्रुप 0 पूरा मिलान है)। captures मेथड Option<Captures> लौटाता है। यदि मिलान मिलता है, तो हम इंडेक्स के माध्यम से ग्रुप्स तक पहुँच सकते हैं।

\n\n

ग्रुप्स के साथ सभी उदाहरण निकालने के लिए captures_iter का उपयोग किया जाता है:

\n\n
use regex::Regex;\n\nfn main() {\n    let re = Regex::new(r"(\\w+)@(\\w+)\\.(\\w+)").unwrap();\n    let text = "ईमेल: user@host.com, admin@site.org";\n\n    for caps in re.captures_iter(text) {\n        println!("लॉगिन: {}, डोमेन: {}, ज़ोन: {}", &caps[1], &caps[2], &caps[3]);\n    }\n}
\n\n

यह दृष्टिकोण लॉग्स, कॉन्फ़िगरेशन फ़ाइलों को पार्स करने या असंरचित टेक्स्ट से संरचित डेटा निकालने के लिए अपरिहार्य है।

\n\n

पैटर्न के अनुसार टेक्स्ट बदलना

\n\n

regex क्रेट टेक्स्ट को बदलने के लिए कई मेथड प्रदान करता है। सबसे सरल है replace, जो पहले मिलान को बदलता है:

\n\n
use regex::Regex;\n\nfn main() {\n    let re = Regex::new(r"\\bRust\\b").unwrap();\n    let text = "Rust एक शानदार भाषा है। मुझे Rust पसंद है।";\n    let result = re.replace(text, "Go");\n    println!("{}", result);\n}
\n\n

यह आउटपुट देगा: "Go एक शानदार भाषा है। मुझे Rust पसंद है।"

\n\n

सभी मिलान बदलने के लिए replace_all का उपयोग करें:

\n\n
use regex::Regex;\n\nfn main() {\n    let re = Regex::new(r"\\bRust\\b").unwrap();\n    let text = "Rust एक शानदार भाषा है। मुझे Rust पसंद है।";\n    let result = re.replace_all(text, "Go");\n    println!("{}", result);\n}
\n\n

यह आउटपुट देगा: "Go एक शानदार भाषा है। मुझे Go पसंद है।"

\n\n

रिप्लेसमेंट स्ट्रिंग में कैप्चरिंग ग्रुप्स के संदर्भों का उपयोग किया जा सकता है:

\n\n
use regex::Regex;\n\nfn main() {\n    let re = Regex::new(r"(\\w+)@(\\w+)\\.(\\w+)").unwrap();\n    let text = "ईमेल: user@example.com";\n    let result = re.replace_all(text, "$1 at $2 dot $3");\n    println!("{}", result);\n}
\n\n

यह आउटपुट देगा: "ईमेल: user at example dot com"

\n\n

अधिक जटिल प्रतिस्थापनों के लिए, आप एक क्लोजर पास कर सकते हैं:

\n\n
use regex::Regex;\n\nfn main() {\n    let re = Regex::new(r"\\b(\\d+)\\b").unwrap();\n    let text = "मेरे पास 10 सेब और 20 संतरे हैं।";\n    let result = re.replace_all(text, |caps: ®ex::Captures| {\n        let num: i32 = caps[1].parse().unwrap();\n        (num * 2).to_string()\n    });\n    println!("{}", result);\n}
\n\n

यह आउटपुट देगा: "मेरे पास 20 सेब और 40 संतरे हैं।"

\n\n

स्ट्रिंग वैलिडेशन

\n\n

रेगुलर एक्सप्रेशन का उपयोग अक्सर इनपुट डेटा को मान्य करने के लिए किया जाता है। आइए फ़ोन नंबर वैलिडेशन का उदाहरण देखें:

\n\n
use regex::Regex;\n\nfn validate_phone(phone: &str) -> bool {\n    let re = Regex::new(r"^\\+?[1-9]\\d{1,14}$").unwrap();\n    re.is_match(phone)\n}\n\nfn main() {\n    let phones = vec!["+79123456789", "12345", "+1234567890123456"];\n    for phone in phones {\n        println!("{}: {}", phone, validate_phone(phone));\n    }\n}
\n\n

यह कोड जाँचता है कि फ़ोन नंबर अंतर्राष्ट्रीय प्रारूप (E.164) से मेल खाता है या नहीं।

\n\n

निष्कर्ष

\n\n

Rust में regex क्रेट रेगुलर एक्सप्रेशन के साथ काम करने का एक शक्तिशाली और कुशल तरीका प्रदान करता है। हमने कवर किया:

\n\n
    \n
  • क्रेट को स्थापित करना और कनेक्ट करना
  • \n
  • बुनियादी मिलान खोजना
  • \n
  • कैप्चरिंग ग्रुप्स का उपयोग करके डेटा निकालना
  • \n
  • सरल और जटिल टेक्स्ट प्रतिस्थापन
  • \n
  • इनपुट डेटा वैलिडेशन
  • \n
\n\n

ये तकनीकें लॉग प्रोसेसिंग, डेटा पार्सिंग, फॉर्म वैलिडेशन और कई अन्य कार्यों में उपयोगी हैं। regex क्रेट के बारे में अधिक जानकारी के लिए, आधिकारिक दस्तावेज़ देखें।

ब्लॉग

पुस्तक अनुशंसाएँ