নিয়মিত এক্সপ্রেশন হিসাবে আন্ডার / ওআর অপারেটরটি কীভাবে উপস্থাপিত হয়?


219

আমি বর্তমানে একটি ভোকাবুলারি অ্যালগরিদম প্রোগ্রাম করছি যা কোনও ব্যবহারকারী শব্দটিতে সঠিকভাবে টাইপ করেছে কিনা তা পরীক্ষা করে। আমার নিম্নলিখিত পরিস্থিতি রয়েছে: শব্দের সঠিক সমাধানটি হবে "part1, part2"। ব্যবহারকারীর "পার্ট 1" (উত্তর 1), "পার্ট 2" (উত্তর 2) বা "পার্ট 1, পার্ট 2" (উত্তর 3) প্রবেশ করতে সক্ষম হওয়া উচিত। আমি এখন ব্যবহারকারী দ্বারা প্রদত্ত স্ট্রিংটি স্বয়ংক্রিয়ভাবে তৈরি, রেজেক্স অভিব্যক্তিটির সাথে মিলে যাওয়ার চেষ্টা করি:

^(part1|part2)$

এটি কেবল উত্তর 1 এবং 2 টি সঠিক হিসাবে প্রত্যাবর্তন করবে তবে 3 টি উত্তর ভুল হবে। আমি এখন ভাবছি | এর মতো কোনও অপারেটর আছে কি না যে and/orপরিবর্তে বলে either...or

কেউ কি আমাকে এই সমস্যা সমাধানে সহায়তা করতে পারে?


1
নিয়মিত প্রকাশগুলি এর পক্ষে সেরা সমাধান নাও হতে পারে। আমি সাধারণ স্ট্রিং পদ্ধতি ব্যবহার করতাম।
ফেলিক্স ক্লিং

3
এই সমস্যাটি খারাপভাবে নির্দিষ্ট করা হয়েছে। যখন আপনার প্রয়োজন সমস্ত আইনী স্ট্রিংয়ের সেটগুলির বিপরীতে হুবহু স্ট্রিং তুলনা হয় আপনি কেন প্যাটার্ন মিল ব্যবহার করছেন? আপনার রেজেক্স সংকলক পার্লের ও (1) ট্রাই কাঠামোর পরিবর্তে বিকল্পগুলি অনুকূল না করে আপনার পরিবর্তে সম্ভবত হ্যাশ সদস্যতার বিরুদ্ধে একটি পরীক্ষা করা উচিত। অন্যান্য রেজেক্স ইঞ্জিনগুলি এখন খুব চালাক নয়।
tchrist

@ ট্রিচ্রিস্ট ইউজ কেসটি একটি মঙ্গডব রেইজেক্স $orম্যাচ হতে পারে
নাদির আব্বাস ২

উত্তর:


283

আমি ধরে নিচ্ছি যে আপনি পার্ট 1 এবং পার্ট 2 ব্যতীত অন্য শব্দের সমন্বিত করতে গতিশীলভাবে একটি রেজেক্স তৈরি করতে চান এবং আপনি যাতে অর্ডারটি গুরুত্ব না চান তা চান। যদি তাই হয় তবে আপনি এর মতো কিছু ব্যবহার করতে পারেন:

((^|, )(part1|part2|part3))+$

ইতিবাচক মিল:

part1
part2, part1
part1, part2, part3

নেতিবাচক মিল:

part1,           //with and without trailing spaces.
part3, part2, 
otherpart1

4
নোট করুন যে "part1, অংশ" 1 এছাড়াও ইতিবাচক হবে। যা সর্বদা কাম্য নয়
dimaaan

1
@ ডিমামান আপনি কি আপনার উদ্ধৃতিগুলি ভুল জায়গায় রেখেছেন? "part1, part1" মিলবে তবে "part1, part" হবে না " যদিও আপনি সঠিক বলেছেন যে এই জাতীয় পরিস্থিতিটি এই সমাধানটির দ্বারা আওতাভুক্ত নয়, ওপি প্রয়োগের জন্য যেখানে তিনি পরীক্ষা করছেন যে পরীক্ষার স্ট্রিংয়ে শব্দভাণ্ডারের মধ্যে শব্দ রয়েছে কিনা, আমি বিশ্বাস করি যে কোনও শব্দ থাকা সত্ত্বেও তিনি ইতিবাচক ম্যাচটি চান। পুনরাবৃত্ত. শব্দটি এখনও শব্দভান্ডারের অংশ হবে আপনি যতই উদাহরণ পেয়েছেন তা বিবেচনা করে না।
গাউট লেকেন


5

এটি কোনও বিকল্প ছাড়াই কাজ করে?

^((part)1(, \22)?)?(part2)?$

বা কেন এই না?

^((part)1(, (\22))?)?(\4)?$

প্রথমটি সমস্ত অবস্থার জন্য দ্বিতীয়টি সবার জন্য কাজ করে তবে part2(জিএনইউ সেড ৪.১.৫ ব্যবহার করে)


4

রেজেক্সের বিশেষজ্ঞ নয়, তবে আপনি এটি করতে পারেন ^((part1|part2)|(part1, part2))$। কথায় আছে: "অংশ 1 বা অংশ 2 বা উভয়"


2

অথবা আপনি এটি ব্যবহার করতে পারেন:

^(?:part[12]|(part)1,\12)$
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.