আমার রেজেক্সে লজিকাল এবং দরকার।
কিছুটা এইরকম
জ্যাক এবং জেমস
নিম্নলিখিত স্ট্রিংগুলির সাথে একমত
'হাই জ্যাক এখানে জেমস '
'হাই জেমস এখানে জ্যাক '
আমার রেজেক্সে লজিকাল এবং দরকার।
কিছুটা এইরকম
জ্যাক এবং জেমস
নিম্নলিখিত স্ট্রিংগুলির সাথে একমত
'হাই জ্যাক এখানে জেমস '
'হাই জেমস এখানে জ্যাক '
উত্তর:
আপনি চেহারাগুলি ব্যবহার করে চেক করতে পারেন :
^(?=.*\bjack\b)(?=.*\bjames\b).*$
এই পদ্ধতির সুবিধা রয়েছে যা আপনি সহজেই একাধিক শর্ত নির্দিষ্ট করতে পারেন।
^(?=.*\bjack\b)(?=.*\bjames\b)(?=.*\bjason\b)(?=.*\bjules\b).*$
vim
বাক্য গঠন: ^\(.*\<jack\>\)\@=\(.*\<james\>\@=\).*$
বা\v^(.*<jack>)@=(.*<james>)@=.*$
^(?=.*\b#friday\b)(?=.*\b#tgif\b).*$
মেলে ব্যর্থ হয় blah #tgif blah #friday blah
কিন্তু ^(?=.*\bfriday\b)(?=.*\btgif\b).*$
কাজ করে।
\b
এখানে মানে কি ?
চেষ্টা করুন:
james.*jack
যদি আপনি উভয় একই সময়ে চান, তবে or
সেগুলি:
james.*jack|jack.*james
james.*?jack|jack.*?james
। এটি বৃহত পাঠগুলিতে সহায়তা করবে।
যে কমান্ডটি আমি লিখতে চলেছি তার ব্যাখ্যা : -
.
মানে যে কোনও অক্ষর, ডিজিটের জায়গায় আসতে পারে।
*
এর অর্থ শূন্য বা তার বেশি আগের জিনিসটির উপস্থিতি।
|
অর্থ 'বা' ।
সুতরাং,
james.*jack
অনুসন্ধান করবে james
, তারপরে যতক্ষণ না চরিত্রের সংখ্যা jack
আসবে।
যেহেতু আপনি চান jack.*james
বা হয়james.*jack
অতএব আদেশ :
jack.*james|james.*jack
এটি সংক্ষিপ্ত এবং মিষ্টি
(?=.*jack)(?=.*james)
ভিমের একটি শাখা অপারেটর রয়েছে \&
যা কোনও ক্রমে শব্দের একটি সেট সমেত একটি লাইন অনুসন্ধান করার সময় দরকারী। তদতিরিক্ত, প্রয়োজনীয় শব্দের সংকলন প্রসারিত করা তুচ্ছ।
উদাহরণ স্বরূপ,
/.*jack\&.*james
একটি লাইন যুক্ত লাইন jack
এবং james
কোনও ক্রমে মিলবে ।
ব্যবহার সম্পর্কে আরও তথ্যের জন্য এই উত্তরটি দেখুন । আমি ব্র্যাঙ্কিং প্রয়োগ করে এমন কোনও রেইগেক্স গন্ধ সম্পর্কে অবগত নই; অপারেটর এমনকি নিয়মিত এক্সপ্রেশন উইকিপিডিয়া প্রবেশে নথিভুক্ত করা হয় না ।
jack
এবং একjames
যদি এমন কিছু ঘটে, দুই jack
বা দুই james
একমাত্র না অনুমতি দেওয়া হবে jack
এবং এক james
বৈধ হতে হবে, আমরা সম্ভবত অনুরূপ একটি অভিব্যক্তি ডিজাইন করতে পারেন:
^(?!.*\bjack\b.*\bjack\b)(?!.*\bjames\b.*\bjames\b)(?=.*\bjames\b)(?=.*\bjack\b).*$
এখানে, আমরা এই বিবৃতিগুলি ব্যবহার করে সেই জুড়ি উদাহরণগুলি বাদ দিই:
(?!.*\bjack\b.*\bjack\b)
এবং,
(?!.*\bjames\b.*\bjames\b)
আমরা এটিকে সহজও করতে পারি,
^(?!.*\bjack\b.*\bjack\b|.*\bjames\b.*\bjames\b)(?=.*\bjames\b|.*\bjack\b).*$
আপনি যদি ভাবটি সরল / সংশোধন / অন্বেষণ করতে চান তবে এটি regex101.com এর ডানদিকে ডান প্যানেলে ব্যাখ্যা করা হয়েছে । আপনি যদি চান, আপনি এই লিঙ্কটিতেও দেখতে পারেন , কীভাবে এটি কিছু নমুনার ইনপুটগুলির সাথে মেলে।
jex.im নিয়মিত এক্সপ্রেশন ভিজ্যুয়ালাইজ করে:
const regex = /^(?!.*\bjack\b.*\bjack\b|.*\bjames\b.*\bjames\b)(?=.*\bjames\b|.*\bjack\b).*$/gm;
const str = `hi jack here is james
hi james here is jack
hi james jack here is jack james
hi jack james here is james jack
hi jack jack here is jack james
hi james james here is james jack
hi jack jack jack here is james
`;
let m;
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
console.log(`Found match, group ${groupIndex}: ${match}`);
});
}
jack
এবং একjames
এছাড়া প্রথম ডিজাইন করা যায় james
গত jack
, নিম্নলিখিত এক অনুরূপ:
^(?!.*\bjack\b.*\bjack\b|.*\bjames\b.*\bjames\b)(?=.*\bjames\b.*\bjack\b).*$
এবং বিপরীতভাবে:
^(?!.*\bjack\b.*\bjack\b|.*\bjames\b.*\bjames\b)(?=.*\bjack\b.*\bjames\b).*$