मॉड्यूल पाठ (3/4)
लालची बनाम आलसी
डिफ़ॉल्ट रूप से क्वांटिफायर लालची होते हैं: वे जितना संभव हो उपभोग करते हैं
पैटर्न को वैध रखते हुए. क्वांटिफायर के बाद ? जोड़ना (*?, +?,
??, {n,m}?) आपको आलसी संस्करण देता है: यह जितनी कम खपत करता है
संभव.
Sample: **uno** e *due*
Greedy pattern <.*> matches: **uno** e *due* (everything)
Lazy pattern <.*?> matches: ** **
* * (4 matches with the g flag)बिल्कुल वही पैटर्न, अंतर का एक अक्षर (?) जोड़ा गया
क्वांटिफ़ायर), पूरी तरह से अलग परिणाम।
जब यह मायने रखता है
- सीमांकक के बीच की सामग्री (HTML टैग, उद्धरण) निकालने के लिए कोष्ठक) आलसी संस्करण लगभग हमेशा सही होता है।
- पंक्ति के अंत तक से मेल खाने के लिए आप आमतौर पर लालची (
.*) चाहते हैं।
इंजन में लालची बनाम आलसी रणनीतियाँ
एक लालची क्वांटिफ़ायर जितना संभव हो उतना पाठ का उपभोग करता है और मजबूर होने पर ही पीछे हटता है। ? (lazy) जोड़कर, इंजन पूर्ण न्यूनतम उपभोग करता है और पैटर्न के अगले मिलान की खोज करते हुए एक समय में एक वर्ण को आगे बढ़ाता है।
इसे अजमाएं
आलसी संस्करण `.*?` का उपयोग करके नमूने से प्रत्येक HTML टैग निकालें (उदाहरण के लिए `**`, `**`, `*`, `*`)।
संकेत दिखाएँ
लालची <.*> पहले टैग की शुरुआत से आखिरी टैग के अंत तक मेल खाता है। आलसी <.*?> पहली बार रुकता है > उसका सामना होता है।
3 प्रयासों के बाद समाधान उपलब्ध है
व्यायाम की समीक्षा करें
पाठ में दोहरे उद्धरण चिह्नों के बीच प्रत्येक स्ट्रिंग निकालें (उदाहरण के लिए "सियाओ", "मोंडो")। बाद में समापन पर जाने से बचने के लिए क्वांटिफायर के आलसी संस्करण का उपयोग करें।
संकेत दिखाएँ
".*?" पहले समापन दोहरे उद्धरण पर रुकता है।
3 प्रयासों के बाद समाधान उपलब्ध है
अतिरिक्त चुनौती
Extract all text blocks enclosed in square brackets (e.g. `[text]`), including the brackets, using a lazy quantifier so as not to merge separate blocks.
संकेत दिखाएँ
खुले ब्रैकेट के लिए \\[ का उपयोग करें, फिर .*? और अंत में बंद ब्रैकेट के लिए \\]।
3 प्रयासों के बाद समाधान उपलब्ध है