সবচেয়ে বড়টির পরিবর্তে সবচেয়ে ছোট বৈধ ম্যাচটি পেতে আমি কীভাবে RegEx (.NET সংস্করণ) বলব?
সবচেয়ে বড়টির পরিবর্তে সবচেয়ে ছোট বৈধ ম্যাচটি পেতে আমি কীভাবে RegEx (.NET সংস্করণ) বলব?
উত্তর:
.*
বা মত নিয়মিত প্রকাশের জন্য .+
, একটি প্রশ্ন চিহ্ন যুক্ত করুন ( .*?
বা .+?
) যথাসম্ভব কম অক্ষরের সাথে মেলে। Sectionচ্ছিকভাবে কোনও বিভাগের সাথে (?:blah)?
মেলাতে তবে একেবারে প্রয়োজনীয় না হলে মিল না করা, এর মতো কিছু ব্যবহার করুন (?:blah){0,1}?
। পুনরাবৃত্তি ম্যাচের জন্য (হয় {n,}
বা {n,m}
সিনট্যাক্স ব্যবহার করে ) যতটা সম্ভব সংখ্যক ম্যাচের চেষ্টা করার জন্য একটি প্রশ্ন চিহ্ন যুক্ত করুন (যেমন {3,}?
বা {5,7}?
)।
নিয়মিত এক্সপ্রেশন কোয়ান্টিফায়ারগুলিতে ডকুমেন্টেশনও সহায়ক হতে পারে।
অ-লোভী অপারেটর ?
,। তাই ভালো:
.*?
লোভহীন অপারেটরটির অর্থ সংক্ষিপ্ততম ম্যাচটি নয়:
abcabk
a.+?k
শুধুমাত্র শেষ তিনটি চিহ্নের পরিবর্তে পুরো স্ট্রিংটির (এই উদাহরণে) মিলবে।
আমি এর পরিবর্তে প্রকৃততম ক্ষুদ্রতম ম্যাচটি খুঁজে পেতে চাই।
' a
' এর জন্য এটি সর্বশেষ সম্ভাব্য ম্যাচটি এখনও সমস্ত ম্যাচের জন্য মঞ্জুরি দেয় k
।
আমি অনুমান করি যে এটি করার একমাত্র উপায় হ'ল:
a[^a]+?k
cab
। যদি আমার ইনপুট হয় caaacab
এবং আমি a.*?b
এটি অনুসন্ধান করি তবে ভিতরে সংক্ষিপ্ত মিলের পরিবর্তে পুরো স্ট্রিংটি ফিরে আসবে। আমি কীভাবে পিছন থেকে সন্ধান করব b
?
START[^START]*?END
(যেখানে START এবং সমাপ্তি আপনার শুরু এবং শেষ চরিত্রের রেজিক্স)। এর মূল অর্থ "START থেকে শেষ পর্যন্ত যে কোনও কিছুর সাথে মেলে যেখানে
abcabk
এবং এর সাথেa.+?k
, RegEx পুরো স্ট্রিংয়ের সাথে মিলবে।