উদাহরণস্বরূপ আমার একটি রেজেক্স রয়েছে (ma|(t){1})
। এটি মেলে ma
এবং t
মিলছে না bla
।
আমি Regex অস্বীকার করা, সুতরাং এটা মেলানো চান bla
এবং ma
এবং t
, এই Regex কিছু যোগ করে । আমি জানি আমি লিখতে পারি bla
, আসল রেজেক্স তবে আরও জটিল।
উদাহরণস্বরূপ আমার একটি রেজেক্স রয়েছে (ma|(t){1})
। এটি মেলে ma
এবং t
মিলছে না bla
।
আমি Regex অস্বীকার করা, সুতরাং এটা মেলানো চান bla
এবং ma
এবং t
, এই Regex কিছু যোগ করে । আমি জানি আমি লিখতে পারি bla
, আসল রেজেক্স তবে আরও জটিল।
উত্তর:
নেতিবাচক চেহারা দেখতে ব্যবহার করুন: (?!
pattern
)
ইতিবাচক দর্শনগুলি কোনও প্যাটার্নের সাথে মেলে তা জোর দিয়ে ব্যবহার করা যেতে পারে। নেতিবাচক চেহারাগুলি বিপরীত: এটি একটি প্যাটার্নটি মেলে না তা জোর দিয়ে ব্যবহৃত হয় used কিছু গন্ধ দৃser় সমর্থন; কিছু লুকবাইন্ড ইত্যাদি সীমাবদ্ধতা রাখে।
এগুলি খেলনা সমস্যাগুলির রেজিেক্স সমাধানগুলি ব্যায়াম হিসাবে গ্রহণ করার চেষ্টা করা হয়; আপনি যদি বিভিন্নভাবে নজরকাড়া ব্যবহার করতে পারেন (বাসা বেঁধে রাখছেন, সেগুলি ধরার জন্য ব্যবহার করছেন ইত্যাদি) বিভিন্নভাবে শেখার চেষ্টা করছেন তবে তাদের শিক্ষাগত হওয়া উচিত:
Pattern.compile("(?!(a.*b))").matcher("xab").matches()
হওয়া উচিত true
, ঠিক?
ধরে নিই যে আপনি কেবল রেজেক্সের সাথে মেলে এমন স্ট্রিংগুলিকেই বাতিল করতে চান (অর্থাত্ mmbla
ঠিক আছে, তবে mm
তা নয়), আপনি যা চান তা এই:
^(?!(?:m{2}|t)$).*$
(?!(?:m{2}|t)$)
একটি নেতিবাচক চেহারা ; এটিতে "বর্তমান অবস্থান থেকে শুরু করে, পরবর্তী কয়েকটি অক্ষর স্ট্রিংয়ের শেষে হয় না mm
বা t
হয়"। ^
শুরুতে স্টার্ট অ্যাঙ্কর ( ) নিশ্চিত করে যে স্ট্রিংয়ের শুরুতে লুকোহেড প্রয়োগ করা হয়েছে। যদি এটি সফল হয়, .*
এগিয়ে যায় এবং স্ট্রিং গ্রাস করে।
এফওয়াইআই, আপনি যদি জাভা matches()
পদ্ধতি ব্যবহার করেন তবে আপনার সত্যিকারের ^
ফাইনাল এবং ফাইনালের দরকার নেই $
তবে তারা কোনও ক্ষতি করবেন না। $
ভিতরে lookahead প্রয়োজন, যদিও করা হয়।
.*
আপনার রেজেক্সের শেষে যুক্ত করতে হবে, অন্যথায় এটি প্রতিটি স্ট্রিংকে প্রত্যাখ্যান করবে।
$
ভিতরে নেতিবাচক lookahead, এবং .*
শেষে উভয় সমালোচনামূলক বিট। আরইএস এর মতো সর্বদা, ইউনিট পরীক্ষার একটি শক্তিশালী সেট এটি সঠিকভাবে অর্জনের জন্য একেবারে সমালোচিত। এই উত্তরটি 100% সঠিক।
\b(?=\w)(?!(ma|(t){1}))\b(\w*)
এটি প্রদত্ত রেজেক্সের জন্য।
\ বি শব্দের সীমানা সন্ধান করা।
ইতিবাচক চেহারা এগিয়ে (? = \ ডাব্লু) ফাঁকা স্থান এড়াতে এখানে।
আসল রেজেক্সের চেয়ে এগিয়ে নেতিবাচক চেহারা এর মিলগুলি প্রতিরোধ করা।
এবং অবশেষে (\ ডাব্লু *) হ'ল বাকী সমস্ত শব্দটি ধরা।
যে গ্রুপটি এই শব্দগুলিকে ধরে রাখবে সে গ্রুপটি ৩.
সাধারণ (?! প্যাটার্ন) কোনও উপ-স্ট্রিং
সাধারণ match (?! (?! (?: m {2} | t) $) match) এর সাথে মিলবে বলে কাজ করবে না *) গ্রানুলারিটি পুরো লাইন হিসাবে কাজ করে না
আপনি যদি লারাভেল ব্যবহার করেন তবে এটি প্রয়োগ করুন।
লারাভেলের একটি not_regex রয়েছে যেখানে বৈধতার অধীনে ক্ষেত্র অবশ্যই প্রদত্ত নিয়মিত প্রকাশের সাথে মেলে না; preg_match
অভ্যন্তরীণভাবে পিএইচপি ফাংশন ব্যবহার করে ।
'email' => 'not_regex:/^.+$/i'
{1}
যেমন সম্পূর্ণ অকেজো। (আপনি যদি মনে করেন এটির কোনও মূল্য সরবরাহ করা হয় তবে আপনি কেন লিখেন না((m{1}a{1}){1}|(t){1}){1}
?)