লোভী বনাম অ-লোভী উপর
ডিফল্টরূপে রেজেক্সে পুনরাবৃত্তি লোভী : তারা যতটা সম্ভব সংখ্যক প্রতিরূপের সাথে মেলে চেষ্টা করে এবং যখন এটি কাজ করে না এবং তাদের ব্যাকট্র্যাক করতে হয়, পুরো প্যাটার্নের ম্যাচ না হওয়া পর্যন্ত তারা একবারে একটি করে কম রিপ্রেসের সাথে মেলে চেষ্টা করে until পাওয়া যায় নি। ফলস্বরূপ, যখন একটি ম্যাচ পরিশেষে ঘটে, একটি অর্থগৃধ্নু পুনরাবৃত্তি যেমন মেলে দিবে অনেক সম্ভব প্রতিনিধি।
?
একটি পুনরাবৃত্তি কোয়ান্টিফায়ার মধ্যে এই আচরণ পরিবর্তন হিসাবে অ লোভী , নামেও অনিচ্ছুক ( উদাঃ জাভা ) (এবং কখনও কখনও "অলস")। বিপরীতে, এই পুনরাবৃত্তিটি প্রথমে যথাসম্ভব কয়েকটি সংখ্যক মিলকে মিলিয়ে দেখার চেষ্টা করবে এবং যখন এটি কাজ করে না এবং তাদের ব্যাকট্র্যাক করতে হয়, তখন তারা আরও একটি বারের সাথে মিলে যায়। ফলস্বরূপ, যখন একটি ম্যাচ পরিশেষে ঘটে, একটি অনিচ্ছুক পুনরাবৃত্তি যেমন মেলে দিবে কয়েক সম্ভব প্রতিনিধি।
তথ্যসূত্র
উদাহরণ 1: এ থেকে জেড পর্যন্ত
আসুন এই দুটি নিদর্শন তুলনা করা যাক: A.*Z
এবং A.*?Z
।
নিম্নলিখিত ইনপুট দেওয়া হয়েছে:
eeeAiiZuuuuAoooZeeee
নিদর্শনগুলি নিম্নলিখিত ম্যাচগুলি দেয়:
প্রথমে কি A.*Z
করে তার উপর ফোকাস করা যাক । এটি প্রথমটির সাথে মিলে গেলে A
, .*
লোভী হওয়ার কারণে, প্রথমে .
যথাসম্ভব মেলানোর চেষ্টা করে ।
eeeAiiZuuuuAoooZeeee
\_______________/
A.* matched, Z can't match
যেহেতু Z
মেলে না, ইঞ্জিনটি ব্যাকট্র্যাক করে এবং .*
তারপরে অবশ্যই একটি কম লোকের সাথে মেলে .
:
eeeAiiZuuuuAoooZeeee
\______________/
A.* matched, Z still can't match
এটি আরও কয়েকবার ঘটে, অবশেষে আমরা এখানে আসার আগে পর্যন্ত:
eeeAiiZuuuuAoooZeeee
\__________/
A.* matched, Z can now match
এখন Z
মিলতে পারে, সুতরাং সামগ্রিক প্যাটার্ন মেলে:
eeeAiiZuuuuAoooZeeee
\___________/
A.*Z matched
বিপরীতে, A.*?Z
প্রথম ম্যাচে .
যতটা সম্ভব সংখ্যক অনিচ্ছুক পুনরাবৃত্তি এবং তারপরে .
প্রয়োজনীয় হিসাবে আরও গ্রহণ করা । এটি কেন ইনপুটটিতে দুটি মিল খুঁজে পায় তা ব্যাখ্যা করে।
দুটি নিদর্শন কী মিলছে তার এখানে একটি দর্শনীয় উপস্থাপনা:
eeeAiiZuuuuAoooZeeee
\__/r \___/r r = reluctant
\____g____/ g = greedy
উদাহরণ: একটি বিকল্প
অনেক অ্যাপ্লিকেশনগুলিতে, উপরের ইনপুটটিতে দুটি ম্যাচ যা পছন্দসই তা হ'ল, সুতরাং অতিরিক্ত মেজাজ ঠেকানোর জন্য লোভীর .*?
পরিবর্তে অনিচ্ছুক ব্যবহার করা হয় .*
। এই নির্দিষ্ট প্যাটার্নের জন্য, তবে অবহেলিত চরিত্র শ্রেণীর ব্যবহার করে আরও ভাল বিকল্প রয়েছে।
প্যাটার্নটি উপরের ইনপুটটির জন্য প্যাটার্নের A[^Z]*Z
মতো একই দুটি ম্যাচও আবিষ্কার করে A.*?Z
(আদর্শ আইটেম হিসাবে দেখা যায় )। [^Z]
একে অবহেলিত চরিত্রের শ্রেণি বলা হয় : এটির সাথে কিছু মিলছে Z
।
দুটি নিদর্শনগুলির মধ্যে প্রধান পার্থক্যটি হল পারফরম্যান্স: আরও কঠোর হওয়ায় অবহেলিত চরিত্রের শ্রেণি প্রদত্ত ইনপুটটির জন্য কেবল একটি পথের সাথে মেলে। আপনি এই প্যাটার্নটির জন্য লোভী বা অনিচ্ছুক সংশোধক ব্যবহার করেন কিনা তা বিবেচ্য নয়। প্রকৃতপক্ষে, কিছু স্বাদে, আপনি আরও ভাল করতে পারেন এবং অধিষ্ঠিত কোয়ান্টিফায়ার বলা হয় যা ব্যবহার করতে পারেন, যা মোটেই ব্যাকট্র্যাক হয় না।
তথ্যসূত্র
উদাহরণ 2: এ থেকে জেডজেডে
এই উদাহরণটি উদাহরণস্বরূপ হওয়া উচিত: এটি দেখায় যে কীভাবে লোভী, অনিচ্ছুক এবং অবহেলিত চরিত্রের শ্রেণীর ধরণগুলি একই ইনপুট প্রদানে পৃথকভাবে মেলে।
eeAiiZooAuuZZeeeZZfff
উপরের ইনপুটটির জন্য এটি ম্যাচগুলি:
তারা কী মিলছে তার একটি ভিজ্যুয়াল উপস্থাপনা:
___n
/ \ n = negated character class
eeAiiZooAuuZZeeeZZfff r = reluctant
\_________/r / g = greedy
\____________/g
সম্পর্কিত বিষয়
এগুলি স্ট্যাকওভারফ্লো সম্পর্কিত প্রশ্ন এবং উত্তরের লিঙ্ক যা কিছু আগ্রহী বিষয় থাকতে পারে cover
একটি লোভী পুনরাবৃত্তি অন্যকে ছাড়িয়ে যেতে পারে