দুটি বা চারবার একটি অঙ্কের সাথে মিল দেওয়ার জন্য রেজেক্স


96

এটি নিয়মিত প্রকাশের বিষয়ে একটি সাধারণ প্রশ্ন, তবে আমি উত্তরটি খুঁজে পাচ্ছি না।

আমি নির্ধারণ করতে চাই যে কোনও সংখ্যাটি যথাযথভাবে দুই বা চারবার প্রদর্শিত হয়েছে কিনা । আমি কোন বাক্য গঠন ব্যবহার করতে পারি?

\d{what goes here?}

আমি চেষ্টা করেছি \d{2,4}, তবে এই প্রকাশটি তিনটি সংখ্যাও গ্রহণ করে।


4
উদাহরণস্বরূপ, একটি দুটি বা চার-অঙ্কের বছরের সাথে মেলে ।
ডেভিডআরআর

স্ট্রিং হলে আপনি কী হতে চান abc 123 xyz? এটি 12যথাযথ দুটি অঙ্কের কারণ এটি কি মিলবে ? বা এটি হওয়া উচিত নয়, কারণ 12এটি একটি বৃহত অঙ্কের ক্রমের অংশ 123যা নিজেই 2 বা 4 দীর্ঘ নয়? যদি আমার অনুমান করতে হয় তবে আমি মনে করি আপনি পরবর্তী আচরণটি চান তবে এটি আপনার প্রশ্ন থেকে পরিষ্কার নয়। উদাহরণ এবং / অথবা একটি পরিষ্কার স্পেসিফিকেশন সাহায্য করবে। একই প্রশ্ন abc 12345 def... সেখানে কী ঘটতে হবে?
জিন-ফ্রান্সোইস কর্পেট

উত্তর:


148

এর জন্য কোনও নির্দিষ্ট বাক্য গঠন নেই, তবে এটি করার প্রচুর উপায় রয়েছে:

(?:\d{4}|\d{2})    <-- alternation: four digits or two
\d{2}(?:\d{2})?    <-- two digits, and optionally two more
(?:\d{2}){1,2}     <-- two digits, times one or two

4
ব্যাক্তিগতভাবে, কেবল \d{2}(?:\d{2})?ব্যাট থেকে ঠিক সমাধানটির বিষয়ে চিন্তাভাবনা করা হয়েছিল - এর মধ্যে দুর্দান্ত বিভিন্ন - শেষটি, বিশেষত, খুব সুন্দর এবং স্কেলযোগ্য বলে মনে হচ্ছে।
নাইটফায়ার্কট

4
প্রথমে ৪ টি অঙ্ক, তারপরে ২ টি সংখ্যার সাথে মেলানোর জন্য বিকল্প ব্যবহার করার সময় প্রয়োজনীয় অর্ডারটি মনে রাখার জন্য +1। অন্যান্য বিভিন্নতা প্রদান ভাল কাজ।
আহমাদ

9
আমার মত, যে কেউ এর ব্যবহার বুঝতে পারে না তার জন্য (?:একটি "নন-ক্যাপচারিং গ্রুপ" (একটি গোষ্ঠী যা প্রতিস্থাপনের বিবৃতিতে উল্লেখ করার উদ্দেশ্যে নয়) শুরু করে। আপনি কেবল প্যারেন্স ব্যবহার করতে পারেন তবে এগুলি একটি ক্যাপচারিং গ্রুপ তৈরি করবে। আরও বিশদ এখানে: স্ট্যাকওভারফ্লো
জেরেমি মরিটজ

এগুলি "333" এবং "33"
ড্যান

4
@ ড্যান: এই রেজিক্সগুলি সম্পূর্ণ স্ট্রিংয়ের সাথে মেলে না"333" । আপনি আপনার রেজেক্স লাইব্রেরির "ফাইন্ড ম্যাচিং স্ট্রিং" ফাংশনটি ভুলক্রমে ব্যবহার করছেন, তার "সম্পূর্ণ স্ট্রিং মেলে কিনা তা পরীক্ষা করুন" কার্যকারিতা থেকে। আপনি এর ডকুমেন্টেশন পরামর্শ করা উচিত।
রুখ

3
(?<!\d)(\d{2}|\d{4})(?!\d)

এটি করার সঠিক উপায় এটি। গৃহীত উত্তরটি ভুল।

এটি 3 ডিজিটের সাথে মিলবে (বা 5)। সুতরাং আমার চোখে এটি ভুল

1) 2 বা 4 অঙ্কের অনুক্রমের আগে বা দুটি বা চার অঙ্কের ক্রমের পরে কোনও অঙ্ক নেই Check

  • (<!) বাক্যবিন্যাস নেতিবাচক চেহারা পিছনে

  • (?!) বাক্য গঠনটি নেতিবাচক চেহারা

উপরেরটি মাঝের স্ট্রিংয়ের জন্য কাজ করবে:

আপনি ব্যবহার আপনার অনুসন্ধান স্ট্রিং এটি প্রায় কোনো বিষয়বস্তু থাকে পারে ^এবং $শুরু করা এবং স্ট্রিং নোঙ্গর শেষ:

^\d{4}$|^\d{2}$

4
আমি এটি বলব না যে গৃহীত উত্তরটি ভুল। আমি বলব যে প্রশ্নটি অস্পষ্ট, এবং সেই উত্তরটি এর একটি বৈধ ব্যাখ্যাকে সম্বোধন করে। আপনার উত্তরটি অন্য একটি বৈধ ব্যাখ্যাকে সম্বোধন করে (যা আমি মনে করি এটি সম্ভবত একটি সম্ভবত - তবে সম্ভবত প্রশ্নকর্তা তা করেননি ...)।
জিন-ফ্রান্সোইস কর্পেট

4
"এটি 3 সংখ্যার সাথে মেলে" বেশ নির্ভুল নয়। আমার মনে হয় আপনার অর্থ "এটি একটি 3-অঙ্কের অনুক্রমের 2-অঙ্কের অনুক্রমের সাথে মেলে।"
জিন-ফ্রান্সোইস কর্পেট

4
এছাড়াও, আপনার উত্তর 5 বা ততোধিক সংখ্যার ক্রম অনুসারে কার্যকরভাবে কাজ করে না । আমি কোনও রেজেক্স বিশেষজ্ঞ নই, তবে আমার ধারণা এটির সমাধানের একটি উপায় হ'ল নেতিবাচক চেহারা / পিছনে উভয় ক্ষেত্রেই প্রয়োগ করা (2- এবং 4-অঙ্কের ক্রম):(?<!\d)(\d{2}|\d{4})(?!\d)
জ্যান-ফরাসোইস কর্পেট

আমি মনে করি আপনি 5 টি সংখ্যা সম্পর্কে সঠিক। সংশোধন করার জন্য ধন্যবাদ। ঠিক করে দেবে।
জেজিএফএমকে

^\d{4}$|^\d{2}$এটি ঠিক করার সম্ভাব্য উপায়। যেমনটি ছিল^\d{2}(?!\d)|^\d{4}(?!\d)
জেজিএফএমকে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.