tl; dr जावा में एक रेगेक्स (मिलान करने के लिए, कैप्चरिंग के लिए) में मनमाने ढंग से regexes को जोड़ने/गठबंधन करने का कोई तरीका है?संयोजन (या) मनमाने ढंग से नियमित अभिव्यक्ति
अपने आवेदन में मैं उपयोगकर्ता से दो सूचियां मिली हैं:
- नियमित अभिव्यक्ति की सूची
- तार
की सूची और मैं उत्पादन के लिए स्ट्रिंग की एक सूची की जरूरत है में (2) जो कि किसी भी नियमित अभिव्यक्ति से मेल नहीं खाते थे (1)।
मेरे पास जगह में स्पष्ट निष्पक्ष कार्यान्वयन है (सभी स्ट्रिंग्स (2) में पुनरावृत्त करें; प्रत्येक स्ट्रिंग (1) में सभी स्ट्रिंग्स को फिर से भरने के लिए; यदि कोई पैटर्न स्ट्रिंग से मेल नहीं खाता है तो उसे वापस सूची में जोड़ दिया जाएगा) लेकिन मैं सोच रहा था कि सभी पैटर्न को एक ही में जोड़ना संभव था और रेगेक्स कंपाइलर ऑप्टिमाइज़ेशन के अवसरों का फायदा उठाए।
रेगेक्स को ओआर-गठबंधन करने का स्पष्ट तरीका स्पष्ट रूप से (regex1)|(regex2)|(regex3)|...|(regexN)
है लेकिन मुझे पूरा यकीन है कि यह व्यक्तिगत बातों पर कोई नियंत्रण नहीं है (उदाहरण के लिए वे पीछे/आगे के सभी शिष्टाचार को शामिल कर सकते हैं) संदर्भ)। इसलिए मैं सोच रहा था कि क्या आप जावा में मनमाने ढंग से regexes को गठबंधन करने के लिए एक बेहतर तरीका सुझा सकते हैं।
ध्यान दें: यह केवल ऊपर से गर्भित है, लेकिन मैं इसे स्पष्ट कर देंगे: मैं केवल स्ट्रिंग के खिलाफ मिलान कर रहा हूँ - मैं पर कब्जा समूहों के उत्पादन में उपयोग करने की आवश्यकता नहीं है।
क्या कोई रेगेक्स स्ट्रिंग के केवल एक हिस्से से मेल खाता है या क्या यह पूरी स्ट्रिंग से मेल खाता है? – Tomalak
@ उपयोगकर्ता द्वारा प्रदान किए गए regexes को टोमालक को स्ट्रिंग के हिस्सों से मिलान करने की अनुमति दी जानी चाहिए (विशेष रूप से, निष्पक्ष कार्यान्वयन में मैं कम से कम एक मैच – CAFxX
और क्या देखता हूं यह देखने के लिए 'Matcher.find()' का उपयोग करता हूं। आपको लगता है कि 'regex1 | regex2 | regex3' गलत परिणाम उत्पन्न करता है? क्या आप ऐसी परिस्थिति बना सकते हैं जिसमें यह होगा? – Tomalak