কোনও কিছুর সাথে মিলের জন্য রেজেক্স যদি এর আগে অন্য কোনও কিছু না ঘটে


164

জাভাতে রেজেক্সের সাহায্যে, আমি একটি রেইজেক্স লিখতে চাই যা মেলে তবেই এবং যদি প্যাটার্নটি নির্দিষ্ট অক্ষরগুলির আগে না হয়। উদাহরণ স্বরূপ:

String s = "foobar barbar beachbar crowbar bar ";

Foo এর আগে বার না থাকলে আমি মেলাতে চাই। সুতরাং আউটপুট হবে:

barbar
beachbar
crowbar
bar

আমি জানি এটি সম্ভবত খুব সহজ প্রশ্ন। আমি রেজেক্স শিখার চেষ্টা করছি তবে এর মধ্যে আমার এখন কাজ করার কিছু দরকার আছে।

উত্তর:


277

আপনি এটির negative lookbehindমতো ব্যবহার করতে চান :

\w*(?<!foo)bar

কোথায় (?<!x)মানে X "এই বিন্দু আগে" "শুধুমাত্র যদি এটা নেই"।

নিয়মিত অভিব্যক্তি দেখুন - আরও তথ্যের জন্য তাত্পর্যপূর্ণ

সম্পাদনা করুন : \w*অক্ষরের আগে ক্যাপচার করার জন্য যোগ করুন (যেমন "সৈকত")।


2
foo_arbitrary_bar এর সাথে মেলে না কি পরিবর্তন করতে হবে? অর্থাত্ তাত্ক্ষণিকভাবে পূর্ববর্তী বার নয়
ব্র্যাড কেন্ট

1
(?<!foo).*barআমার বিশ্বাস ব্র্যাডকেন্ট এর সাথে কিছু মিলবে ।
emyller

@ এমিলার নোপ যা ফুবাজবারের সাথে মিলবে (ফুবাজারের আগে ফুও আসে না, সুতরাং এটি মেলে)
ব্র্যাড কেন্ট

2
@ ব্র্যাডকেন্ট আমি আপনার "নন" "" মিলছে না "তে পড়িনি, তাই কেন আমি বলেছিলাম এটি মিলবে। আপনি কেসটি \b(?!foo)\w*bar\bতখন আমার কাছে দেখতে একরকম লাগে ।
এমিলার

4
@ ব্র্যাডকেন্ট তারপরে আপনি একটি নতুন প্রশ্ন জিজ্ঞাসা করতে পারেন, আপনি কী কী বিস্তারিতভাবে অর্জন করতে চাইছেন তা বিশদভাবে জানাতে বা আপনার নিজের সন্ধান না পাওয়া পর্যন্ত নিয়মিত প্রকাশের সাথে খেলতে চালিয়ে যেতে পারেন। :)
এমিলার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.