मैं RegEx (.NET संस्करण) को सबसे बड़े के बजाय सबसे छोटा वैध मैच कैसे बताऊं?
मैं RegEx (.NET संस्करण) को सबसे बड़े के बजाय सबसे छोटा वैध मैच कैसे बताऊं?
जवाबों:
जैसे एक नियमित अभिव्यक्ति के लिए .*
या की.+
, एक प्रश्न चिह्न ( .*?
या .+?
) को संभव के रूप में कुछ वर्णों से मेल करने के लिए जोड़ें । वैकल्पिक रूप से एक अनुभाग से (?:blah)?
मेल खाने के लिए लेकिन मिलान के बिना जब तक कि बिल्कुल आवश्यक न हो, जैसे कुछ का उपयोग करें (?:blah){0,1}?
। एक दोहरा मैच के लिए (या तो का उपयोग कर {n,}
या {n,m}
एक प्रश्न चिह्न सिंटेक्स) संलग्न संभव (जैसे जितने कम मैच के लिए प्रयास करने के लिए {3,}?
या {5,7}?
)।
नियमित अभिव्यक्ति क्वांटिफायर पर प्रलेखन भी सहायक हो सकता है।
गैर-लालची ऑपरेटर ?
,। इस तरह:
.*?
गैर लालची ऑपरेटर का मतलब कम से कम संभावित मैच से नहीं है:
abcabk
a.+?k
केवल अंतिम तीन संकेतों के बजाय पूरे स्ट्रिंग (इस उदाहरण में) से मेल खाएगा।
मैं वास्तव में इसके बजाय सबसे छोटा संभव मैच ढूंढना चाहता हूं।
वह ' a
' के लिए अंतिम संभावित मैच अभी भी सभी मैचों के लिए अनुमति देता है k
।
मुझे लगता है कि ऐसा करने का एकमात्र तरीका यह है कि अभिव्यक्ति का उपयोग कैसे किया जाए:
a[^a]+?k
cab
। यदि मेरा इनपुट है caaacab
और मैं a.*?b
इसके लिए खोज करता हूं , तो लघु मिलान के बजाय पूर्ण स्ट्रिंग वापस कर देगा। मैं पीछे से कैसे खोजूंगा b
?
START[^START]*?END
(जहाँ START और END आपकी शुरुआत और अंत वर्ण प्रतिक्षेप हैं)। इसका अनिवार्य रूप से अर्थ है "START से END तक कुछ भी मिलान करें जहां बीच-बीच में अक्षर START को फिर से शामिल नहीं करते हैं"
abcabk
औरa.+?k
, RegEx पूरे स्ट्रिंग से मेल खाएगा।