2009-08-23 17 views
20

मैं किसी भी स्ट्रिंग से मेल खाना चाहता हूं जो स्ट्रिंग "DontMatchThis" नहीं है।सी # रेगेक्स एक स्ट्रिंग से मेल खाने के लिए जिसमें एक निश्चित स्ट्रिंग नहीं है?

रेगेक्स क्या है?

(?s)^(?!.*DontMatchThis).*$ 

है आप ((?s) बिना पैटर्न के एक इनलाइन संस्करण है का उपयोग करते हैं

^(?!.*DontMatchThis).*$ 
+0

आप रेगेक्स के साथ ऐसा क्यों करना चाहते हैं और String.IndexOf का उपयोग नहीं करना चाहते हैं? –

+12

क्योंकि कभी-कभी आपका regex कॉन्फ़िगर में है और आप कोड को नहीं बदल सकते हैं। या क्योंकि आपको इसे एक और अधिक जटिल regex के उप-संपीड़न के रूप में आवश्यकता है। या कई कारणों में से कोई भी। आप यह भी पूछ सकते हैं, "आप अपनी बिल्ली को व्याख्यात्मक नृत्य के माध्यम से पाठ के लिए क्यों नहीं लेते हैं?"। कभी-कभी आपके हाथ में हाथ नहीं है। –

उत्तर

45

इस कोशिश RegexOptions.Singleline ध्वज जो . को एक नई लाइन एलएफ प्रतीक के साथ-साथ अन्य सभी पात्रों से मेल खाता है), DontMatchThis केवल पहली पंक्ति के लिए खोजा जाएगा, और केवल एलएफ प्रतीकों के बिना एक स्ट्रिंगसे मेल खाई जाएगी।

पैटर्न विवरण:

  • (?s) - स्ट्रिंग लंगर की शुरुआत
  • (?!.*DontMatchThis) - - एक negative lookahead जाँच यदि कोई हो तो 0 या एक DOTALL/Singleline संशोधक . मैच किसी भी चरित्र
  • ^ बनाने अधिक पात्र (लालची .* उप-पैटर्न से मिलान - नोट एक आलसी .*? संस्करण (अगले उपपरांत मैच से पहले जितना संभव हो उतना अक्षर मिलान करना) DontMatchThis स्ट्रिंग स्टार्ट के करीब होने की अपेक्षा की जाती है) DontMatchThis
  • .* - जितना संभव हो सके शून्य या अधिक वर्ण,
  • $ - स्ट्रिंग का अंत (देखें एंकर वर्ण: डॉलर ($))।
+11

कृपया कुछ स्पष्टीकरण, कृपया। यह कैसे काम करता है? – bikashg

+0

@bikashg: यहां देखें: http://stackoverflow.com/a/11125488/47190 –

11

regex एक स्ट्रिंग है एक निश्चित पैटर्न शामिल नहीं है मैच के लिए:

+1

यह स्वीकृत उत्तर के लिए अच्छा जोड़ा है। – VMAtm

संबंधित मुद्दे

 संबंधित मुद्दे