RegExp मिलान स्ट्रिंग मेरे साथ शुरू नहीं हो रहा है


93

पीएमडी के लिए मैं एक नियम रखना चाहूंगा जो मुझे उन बदसूरत चर की चेतावनी देता है जो इसके साथ शुरू होते हैं my
इसका मतलब है कि मुझे उन सभी चरों को स्वीकार करना होगा जो शुरू नहीं करते हैं my

इसलिए, मुझे एक RegEx (पुनः) की आवश्यकता है जो निम्नानुसार व्यवहार करता है:

re.match('myVar')       == false
re.match('manager')     == true
re.match('thisIsMyVar') == true
re.match('myOtherVar')  == false
re.match('stuff')       == true

मैं विभिन्न लोगों की कोशिश की है, लेकिन यह अभी तक काम नहीं मिला है।


1
मुझे लगता है कि वास्तव में पीछे एक नकारात्मक रूप होना चाहिए (आगे एक नकारात्मक रूप नहीं)।
15

जवाबों:


43

आप या तो दूसरों की तरह दिखावे के दावे का इस्तेमाल कर सकते हैं। या, यदि आप केवल मूल नियमित अभिव्यक्ति सिंटैक्स का उपयोग करना चाहते हैं:

^(.?$|[^m].+|m[^y].*)

यह तार से मेल खाता है जो या तो शून्य या एक वर्ण लंबा है ( ^.?$) और इस तरह नहीं हो सकता my। या दो या दो से अधिक वर्णों के साथ तार, जहां पहला वर्ण नहीं है और mकोई भी वर्ण अनुसरण कर सकता है ( ^[^m].+); या यदि पहला पात्र है mतो उसका पालन नहीं किया जाना चाहिए y( ^m[^y])।


यह वह है जिसका हम अभी उपयोग कर सकते हैं। लगता है कि विस्तारित रेगेक्स के साथ कोई समस्या है, लेकिन यह अभी के लिए ठीक काम करता है।
डोमिनिक सैंड्जाजा

169
^(?!my)\w+$

कार्य करना चाहिए।

यह पहले यह सुनिश्चित करता है कि myस्ट्रिंग की शुरुआत में मिलान करना संभव नहीं है , और फिर स्ट्रिंग के अंत तक अल्फ़ान्यूमेरिक वर्णों से मेल खाता है। स्ट्रिंग में कहीं भी व्हॉट्सएप रेगेक्स को विफल कर देगा। अपने इनपुट के आधार पर आप या तो व्हाट्सएप को फ्रंट और स्ट्रिंग के बैक में रीजेक्स से पास करना चाहते हैं, या रीजेक्स जैसे वैकल्पिक व्हाट्सएप मैचर्स को जोड़ सकते हैं ^\s*(?!my)(\w+)\s*$। इस स्थिति में, पश्चांक 1 में चर का नाम होगा।

और अगर आपको यह सुनिश्चित करने की आवश्यकता है कि आपका चर नाम पात्रों के एक निश्चित समूह के साथ शुरू होता है, तो कहें [A-Za-z_], उपयोग करें

^(?!my)[A-Za-z_]\w*$

से परिवर्तन नोट +करने के लिए *


63
/^(?!my).*/

(?!expression)एक नकारात्मक रूपांतर है; यह उस स्थिति से मेल खाता है जहाँ उस स्थिति से शुरू होने से मेल expression नहीं खाता है।


7

क्या सकारात्मक मैच करना और उन तार को अस्वीकार करना काफी अधिक पठनीय नहीं होगा - स्वीकार करने के लिए नकारात्मक खोजने के बजाय नकारात्मक मिलान करें?

/^my/

4
यह एक नियम के लिए आवश्यक है, लेकिन यह एक नियम के लिए आवश्यक है, जो एक रिपॉजिटरी में आने पर कोड की जांच करता है, इसलिए तर्क "उलटा" नहीं हो सकता है।
डोमिनिक सैंडजाजा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.