जवाबों:
आप एक नज़र-से-आगे का उपयोग कर सकते हैं:
(?!999)\d{3}
यह उदाहरण इसके अलावा तीन अंकों से मेल खाता है 999।
लेकिन अगर आपके पास इस सुविधा के साथ एक नियमित अभिव्यक्ति कार्यान्वयन नहीं है (देखें नियमित अभिव्यक्ति स्वादों की तुलना ), तो आपको संभवतः अपने दम पर बुनियादी सुविधाओं के साथ एक नियमित अभिव्यक्ति का निर्माण करना होगा।
केवल मूल वाक्यविन्यास के साथ एक संगत नियमित अभिव्यक्ति होगी:
[0-8]\d\d|\d[0-8]\d|\d\d[0-8]
यह किसी भी तीन अंकों के अनुक्रम से मेल खाता है जो नहीं है 999।
यदि आप एक स्ट्रिंग में एक शब्द से मेल खाना चाहते हैं और एक शब्द बी से मेल नहीं खाते हैं। उदाहरण के लिए: यदि आपके पास एक पाठ है:
1. I have a two pets - dog and a cat
2. I have a pet - dog
यदि आप पाठ की उन पंक्तियों की खोज करना चाहते हैं जो एक पालतू जानवर के लिए एक कुत्ता है और DOESN'T के पास बिल्ली नहीं है तो आप इस नियमित अभिव्यक्ति का उपयोग कर सकते हैं:
^(?=.*?\bdog\b)((?!cat).)*$
यह केवल दूसरी पंक्ति ढूंढेगा:
2. I have a pet - dog
पैटर्न के खिलाफ मैच करें और मैच के बूलियन परिणाम को पलटने के लिए मेजबान भाषा का उपयोग करें। यह बहुत अधिक सुपाठ्य और बनाए रखने योग्य होगा।
ध्यान दें, इस प्राचीन प्रश्न को फिर से जीवित करना क्योंकि इसका एक सरल समाधान था जिसका उल्लेख नहीं किया गया था। ( रेगेक्स बाउंटी खोज के लिए कुछ शोध करते हुए आपका प्रश्न पाया गया ।)
मैं एक ऐसी स्थिति से सामना कर रहा हूँ जहाँ मुझे एक (A और ~ B) पैटर्न से मेल खाना है।
इस के लिए मूल regex भयावह सरल है: B|(A)
आप केवल समग्र मैचों को अनदेखा करते हैं और समूह 1 के कैप्चर की जांच करते हैं, जिसमें ए होगा।
एक उदाहरण (regex में html पार्स करने के बारे में सभी अस्वीकरणों के साथ): A अंक है, B अंक के भीतर है <a tag
रेगेक्स: <a.*?<\/a>|(\d+)
डेमो (निचले दाएं फलक में समूह 1 देखें)
संदर्भ
\dसाथ प्रतिस्थापित करने के बाद भी [[:digit:]]। पहले संदर्भ में यह उल्लेख है कि यह पर्ल और पीएचपी के लिए विशिष्ट है: "पर्ल और पीएचपी के लिए सिंटैक्स विशिष्ट का उपयोग करके एक भिन्नता है जो समान है।"
एक नियमित भाषा का पूरक भी एक नियमित भाषा है, लेकिन इसका निर्माण करने के लिए आपको नियमित भाषा के लिए DFA का निर्माण करना होगा , और किसी भी मान्य स्थिति को एक त्रुटि में बदलना होगा। इसे एक उदाहरण के लिए देखें । पेज क्या नहीं कहता है कि यह में बदल /(ac|bd)/गया है /(a[^c]?|b[^d]?|[^ab])/। एक DFA से नियमित अभिव्यक्ति में रूपांतरण तुच्छ नहीं है। यह आसान है अगर आप नियमित अभिव्यक्ति का अपरिवर्तित उपयोग कर सकते हैं और शब्दार्थ को कोड में बदल सकते हैं, जैसा कि पहले सुझाया गया है।
replace str.replace(/re/g, ''), तो उन्हें फिर से शामिल करने की कोई आवश्यकता नहीं है। अगर तुम एक अच्छा अनुगामी \ 's में फेंक दो? जैसे str.replace(/\re\s?/g, '')तब आप किसी भी डुप्लिकेट स्थान से छुटकारा पा
यहाँ मेरा जवाब आपकी समस्या को हल कर सकता है:
https://stackoverflow.com/a/27967674/543814
$1, आप समूह पढ़ेंगे $2।$2को वहां गैर-कैप्चरिंग बनाया गया था, जिसे आप टालेंगे।उदाहरण:
Regex.Match("50% of 50% is 25%", "(\d+\%)|(.+?)");
पहला कैप्चरिंग समूह उस पैटर्न को निर्दिष्ट करता है जिससे आप बचना चाहते हैं। अंतिम कैप्चरिंग ग्रुप बाकी सब को पकड़ लेता है। सीधे शब्दों में, उस समूह को पढ़ा $2।
findstrटैग हटा दिया क्योंकि यहाँ सभी उत्तर टैग के लिए मान्य नहीं हैं।