মডিউল পাঠ (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 প্রচেষ্টার পরে উপলব্ধ
ব্যায়াম পর্যালোচনা করুন
পাঠ্যের ডবল উদ্ধৃতিগুলির মধ্যে প্রতিটি স্ট্রিং বের করুন (যেমন "ciao", "mondo")। পরবর্তী ক্লোজিংগুলিতে জাম্পিং এড়াতে কোয়ান্টিফায়ারের অলস সংস্করণটি ব্যবহার করুন।
ইঙ্গিত দেখান
"।*?" প্রথম সমাপনী ডবল উদ্ধৃতিতে থামে।
সমাধান 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 প্রচেষ্টার পরে উপলব্ধ