किस रेगुलर एक्सप्रेशन ऑपरेटर का अर्थ है 'डोंट' इस चरित्र से मेल खाता है?


91

*, ?, +हर तरह के किरदार इस चरित्र से मेल खाते हैं। किस चरित्र का अर्थ है कि यह मेल नहीं खाता? उदाहरण मदद करेंगे।


एक शब्द से मेल नहीं खाने से संबंधित समाधान के लिए - यहां देखें stackoverflow.com/questions/406230
null

जवाबों:


92

आप कुछ वर्णों को बाहर करने के लिए नकारात्मक वर्ण वर्गों का उपयोग कर सकते हैं: उदाहरण के लिए [^abcde]कुछ भी लेकिन ए, बी, सी, डी, ई पात्रों से मेल खाएगा।

सभी वर्णों को शाब्दिक रूप से निर्दिष्ट करने के बजाय, आप वर्ण वर्गों के अंदर शॉर्टहैंड का उपयोग कर सकते हैं : [\w](लोअरकेस) किसी भी "शब्द चरित्र" (अक्षर, संख्या और अंडरस्कोर [\W]) से मेल खाएगा , (अपरकेस) कुछ भी लेकिन शब्द वर्णों से मेल खाएगा; इसी तरह, [\d]0-9 अंकों का मिलान करेगा , जबकि [\D]कुछ भी 0-9 अंकों से मेल खाएगा , और इसी तरह।

यदि आप PHP का उपयोग करते हैं तो आप regex वर्ण वर्गों के दस्तावेज़ देख सकते हैं


82

"मैच नहीं करते" कहने के दो तरीके हैं: चरित्र पर्वतमाला, और शून्य-चौड़ाई नकारात्मक लुकहैड / लुकबाइंड।

पूर्व: मेल नहीं खाते a, b, cया 0:[^a-c0]

उत्तरार्द्ध: को छोड़कर किसी भी तीन-अक्षर स्ट्रिंग से मेल खाता है fooऔर bar:

(?!foo|bar).{3}

या

.{3}(?<!foo|bar)

इसके अलावा, आप के लिए एक सुधार: *, ?और +वास्तव में कुछ भी मेल नहीं खाते। वे पुनरावृत्ति ऑपरेटर हैं, और हमेशा एक मिलान ऑपरेटर का पालन करते हैं। इस प्रकार, a+साधन से एक या अधिक से मेल खाते हैं a, [a-c0]+इसका मतलब है एक या एक से मेल खाते हैं की अधिक a, b, cया 0है, जबकि [^a-c0]+एक से मेल होता है या कुछ भी की अधिक है कि नहीं था a, b, cया 0


^((?!foo).)+$किसी भी पंक्ति का मेल न करें जिसमें foo regex101.com/r/z6a65l/4
Levi Baguley

49

[^] ( [] के भीतर ) नियमित अभिव्यक्ति में नकार है जबकि ^"स्ट्रिंग की भीख" है

[^a-z] किसी भी एक वर्ण है कि मेल खाता नहीं "एक" के लिए "z" तक

^[a-z] स्ट्रिंग का अर्थ "ए" से "जेड" से शुरू होता है

संदर्भ


9

^ एक चरित्र रेंज की शुरुआत में इस्तेमाल किया, या नकारात्मक लग रही / खोज पर जोर दिया।

>>> re.match('[^f]', 'foo')
>>> re.match('[^f]', 'bar')
<_sre.SRE_Match object at 0x7f8b102ad6b0>
>>> re.match('(?!foo)...', 'foo')
>>> re.match('(?!foo)...', 'bar')
<_sre.SRE_Match object at 0x7f8b0fe70780>

क्या आपको ?!अंतिम 2 उदाहरणों में उपयोग करना है या आप केवल !अपने द्वारा उपयोग कर सकते हैं ? ?वहाँ क्या करता है?
अपवोट

पायथन को ?यह बताने की आवश्यकता है कि यह एक विस्तार है। अन्य रेगेक्स इंजन के अपने नियम हो सकते हैं।
इग्नासियो वाज़क्वेज़-अब्राम्स

@ क्लिक करें: यह सुंदर मानक है। regular-expressions.info/refadv.html , अधिकांश regexp इंजन मैनुअल भी यही बात कहते हैं।
आमदन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.