Rust में नियमित अभिव्यक्तियाँ उदाहरण सहित: व्यावहारिक रूप से

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

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

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

परिचय: Rust में नियमित अभिव्यक्तियों की आवश्यकता क्यों है?

\n

नियमित अभिव्यक्तियाँ (regex) पैटर्न के आधार पर टेक्स्ट खोजने, निकालने और बदलने के लिए एक शक्तिशाली उपकरण हैं। Rust में, नियमित अभिव्यक्तियों के साथ काम regex क्रेट के माध्यम से कार्यान्वित किया जाता है, जिसे पारिस्थितिकी तंत्र में सबसे तेज़ और सुरक्षित में से एक माना जाता है। कई अन्य भाषाओं के विपरीत, Rust कंपाइलर संकलन चरण में नियमित अभिव्यक्ति की शुद्धता की जाँच करता है (यदि मैक्रो regex! का उपयोग किया जाता है), जो रनटाइम के दौरान त्रुटियों से बचने में मदद करता है।

\n

इस लेख में, हम Rust में नियमित अभिव्यक्तियों के उपयोग के व्यावहारिक उदाहरणों पर चर्चा करेंगे: बुनियादी खोज से लेकर जटिल डेटा निष्कर्षण तक। आप सीखेंगे कि प्रोजेक्ट कैसे सेट करें, पैटर्न कैसे लिखें और परिणामों को कैसे संसाधित करें।

\n\n

1. प्रोजेक्ट सेटअप और पहला regex

\n

निर्भरता जोड़ना

\n

शुरू करने के लिए, Cargo.toml फ़ाइल में regex क्रेट जोड़ें:

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

इसके बाद, cargo build कमांड से निर्भरताएँ अपडेट करें।

\n\n

पहला उदाहरण: शब्द खोजना

\n

एक सरल प्रोग्राम लिखते हैं जो स्ट्रिंग में "Rust" शब्द ढूँढता है:

\n
use regex::Regex;\n\nfn main() {\n    let re = Regex::new(r"Rust").unwrap();\n    let text = "मैं Rust और Python सीख रहा हूँ।";\n    \n    if re.is_match(text) {\n        println!("'Rust' शब्द मिल गया!");\n    } else {\n        println!("शब्द नहीं मिला।");\n    }\n}
\n

फ़ंक्शन Regex::new पैटर्न को संकलित करता है। यदि पैटर्न अमान्य है, तो प्रोग्राम त्रुटि के साथ समाप्त हो जाएगा (केवल प्रोटोटाइप में unwrap() का उपयोग करें)।

\n\n

2. कैप्चर के साथ डेटा निकालना

\n

समूहीकरण और नामित समूह

\n

नियमित अभिव्यक्तियाँ गोल कोष्ठकों का उपयोग करके टेक्स्ट के भागों को निकालने की अनुमति देती हैं। ईमेल के साथ एक उदाहरण देखें:

\n
use regex::Regex;\n\nfn main() {\n    let re = Regex::new(r"(?P<name>[a-zA-Z0-9._%+-]+)@(?P<domain>[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,})").unwrap();\n    let text = "मेरा ईमेल: user@example.com, और admin@test.org भी।";\n    \n    for caps in re.captures_iter(text) {\n        println!("नाम: {}", &caps["name"]);\n        println!("डोमेन: {}", &caps["domain"]);\n    }\n}
\n

इस उदाहरण में, हम नामित समूहों (?P<name>...) का उपयोग करते हैं। यह कोड को अधिक पठनीय और आगे की प्रक्रिया के लिए सुविधाजनक बनाता है।

\n\n

सभी मिलान निकालना

\n

यदि समूहों के बिना सभी मिलान प्राप्त करने की आवश्यकता है, तो find_iter का उपयोग करें:

\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

विधि find_iter Match ऑब्जेक्ट्स पर एक इटरेटर लौटाती है, जिसमें प्रारंभ और अंत स्थितियाँ, साथ ही मिलान का टेक्स्ट शामिल होता है।

\n\n

3. टेक्स्ट बदलना और जटिल पैटर्न

\n

सरल प्रतिस्थापन

\n

सभी अंकों को "NUMBER" शब्द से बदलें:

\n
use regex::Regex;\n\nfn main() {\n    let re = Regex::new(r"\\d+").unwrap();\n    let text = "कोड: 12345, स्थिति: 0।";\n    let result = re.replace_all(text, "NUMBER");\n    println!("{}", result); // "कोड: NUMBER, स्थिति: NUMBER।"\n}
\n\n

कैप्चर का उपयोग करके प्रतिस्थापन

\n

प्रतिस्थापन स्ट्रिंग में $1, $2 या नामित समूहों $name के साथ समूहों को संदर्भित किया जा सकता है:

\n
use regex::Regex;\n\nfn main() {\n    let re = Regex::new(r"(?P<year>\\d{4})-(?P<month>\\d{2})-(?P<day>\\d{2})").unwrap();\n    let text = "दिनांक: 2024-03-15";\n    let result = re.replace_all(text, "$day.$month.$year");\n    println!("{}", result); // "दिनांक: 15.03.2024"\n}
\n\n

जटिल पैटर्न: लॉग पार्सिंग

\n

एक वास्तविक उदाहरण देखें — वेब सर्वर लॉग लाइन को पार्स करना:

\n
use regex::Regex;\n\nfn main() {\n    let log_line =                

ब्लॉग

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