तुम बस इतना की तरह एक नकारात्मक लुक-आगे में रख सकते हैं:
(?!mak(e|ing) ?it ?cheaper)
बस ऐसे ही, हालांकि बाद से काम करने के लिए, यदि आप एक matches
कर नहीं जा रहा है, ऐसा नहीं होगा मैच के बाद से, आप वास्तव में कुछ भी देख रहे हैं, और यदि आप find
करते हैं, तो यह कई बार मिल जाएगा, क्योंकि आप स्ट्रिंग में बहुत से स्थानों से शुरू कर सकते हैं जहां अगले अक्षर नहीं हैं उपरोक्त मैच नहीं है।
आप सभी स्ट्रिंग बिल्कुल उन में से एक (यानी "यह cheaperblahblah बनाने" कर रहे हैं बाहर करने के लिए करना चाहते हैं:
इसे ठीक करने के लिए आप क्या करना चाहते क्या पर निर्भर करता है, हम 2 विकल्प हैं शामिल नहीं है), स्ट्रिंग की शुरुआत (^
) और अंत ($
) के लिए जाँच:
^(?!mak(e|ing) ?it ?cheaper$).*
.*
(शून्य या अधिक जंगली कार्ड) वास्तविक मिलान लेने जगह है। पहले चरित्र से नकारात्मक रूप से आगे की जांच।
आप सभी स्ट्रिंग्स उन लोगों में से एक युक्त बाहर करना चाहते हैं, तो आप सुनिश्चित कर सकते लुक-आगे हर चरित्र से पहले दर्ज नहीं होता है हम से मेल खाते हैं:
^((?!mak(e|ing) ?it ?cheaper).)*$
एक वैकल्पिक जंगली जोड़ने के लिए है आपके आगे की शुरुआत की शुरुआत में कार्ड (यानीसभी तारों को बाहर करें, स्ट्रिंग की शुरुआत से, कुछ भी शामिल है, फिर आपका पैटर्न), लेकिन मुझे वर्तमान में इसका कोई लाभ नहीं दिख रहा है (मनमाने ढंग से लम्बा दिखने वाला भी किसी दिए गए टूल द्वारा समर्थित होने की संभावना कम है):
^(?!.*mak(e|ing) ?it ?cheaper).*
^
और
$
, या तो एक
find
या एक
matches
कर
matches
के मामले में, हालांकि इसके बाद के संस्करण (दोनों में से किसी के लिए काम करेंगे की वजह से
, ^
वैकल्पिक है और के मामले में, find
, .*
लुक-आगे के बाहर वैकल्पिक है)।
1: हालांकि वे नहीं कहा जा सकता है कि, कई भाषाओं matches
और find
regex के साथ के बराबर कार्य हैं।
उपर्युक्त इस प्रश्न का कड़ाई से-रेगेक्स उत्तर है।
मूल रेगेक्स (mak(e|ing) ?it ?cheaper
) पर चिपकने के लिए एक बेहतर तरीका हो सकता है और देखें कि आप सीधे उपयोग किए जा रहे टूल या भाषा के साथ सीधे मैचों को अस्वीकार कर सकते हैं या नहीं।
जावा में, उदाहरण के लिए, इसमें if (!string.matches(originalRegex))
(!
नोट करें, जो लौटा हुआ बूलियन को अस्वीकार करता है) if (string.matches(negLookRegex))
के बजाय शामिल होगा।