रेगेक्स जो एक मैच के भीतर छोटे मैचों को पसंद करता है? (यह गैर-लालची से अधिक शामिल है)


9

मैं एक बफर के अंदर फजी खोज करने के लिए एक स्क्रिप्ट बनाने की कोशिश कर रहा हूं। मुख्य विचार कुछ इनपुट लेते हैं, और डालने के लिए है .\{-}पात्रों के हर जोड़ी के बीच, जैसे fooहो जाता है f.\{-}o.\{-}o

यह काफी अच्छी तरह से काम करता है, लेकिन बहुत सारे गैर-आदर्श मैचों के साथ आता है। मुझे लगता है कि एक फ़र्ज़ी खोज को पहले कम से कम मैचों का उत्पादन करना चाहिए। निम्नलिखित उदाहरण पर विचार करें:

public void put()

put(तो, p.\{-}u.\{-}t) के लिए एक फजी खोज करना , पूरे स्ट्रिंग से मेल खाएगा public void put, लेकिन putउस मैच के भीतर छोटा अधिक उपयोगी होगा।

गैर-लालची ऑपरेटर मैच को खोजने में अच्छा है जो पहले समाप्त होता है , लेकिन मुझे कुछ ऐसा चाहिए जो एक ही समय में शुरू होने वाले मैचों को पसंद कर सके। वैचारिक रूप से, यह दोनों दिशाओं में गैर-लालची होना चाहिए। क्या यह संभव है?


इन्हें भी देखें: stackoverflow.com/q/15191291 (हालांकि, दुर्भाग्य से आपके सवाल का कोई जवाब नहीं)
Doorknob

1
@ डॉर्कनोब, कोई जवाब नहीं, लेकिन यह एक अच्छा मुद्दा उठाता है: रेगेक्स एक स्ट्रिंग के बीच से खोज शुरू नहीं करता है। मुझे काम पाने के लिए कुछ VimScript शामिल करने पड़ सकते हैं। मैं (लंबे) मैच को पलटने के विचार की खोज कर रहा हूं, और इसे उलट पैटर्न के लिए खोज रहा हूं।
tommcdo

2
टिम पोप ने आज विम-हैस्टैक जारी किया । यह वही है जो आपको चाहिए। हो सकता है कि आपको इससे कुछ प्रेरणा मिल जाए या शायद इसका इस्तेमाल भी कर लें।
टोकियोमी

1
मैं चाहता हूं कि मैच यथासंभव देर से शुरू हो और पैटर्न को संतुष्ट करते हुए जल्द से जल्द खत्म हो।
tommcdo

1
आपको तथाकथित अनुमानित स्ट्रिंग मिलान एल्गोरिदम पर एक नज़र डालनी चाहिए , वे regexps की तुलना में फ़ज़ी फ़ाइंडर को लागू करने के लिए अधिक उपयुक्त उपकरण हैं।
toro2k

जवाबों:


2

पर्याप्त उदाहरण नहीं हैं, लेकिन मुझे लगता है कि यह वही करता है जो आप चाहते हैं।

.*\zsp.\{-}u.\{-}t

के putबजाय अपने उदाहरण में मैच होगा public void put। मूल रूप से .*रेगेक्स इंजन को पीछे की ओर से स्ट्रिंग की खोज शुरू करने के लिए मजबूर करता है, क्योंकि .*पहले पूरे स्ट्रिंग का उपभोग करता है, उसके बाद बैकट्रैक करता है, नवीनतम मैच खोजने के लिएp.\{-}u.\{-}t


मैंने पहले भी यह कोशिश की थी (लेकिन अब तक भूल गया)। यह बहुत अच्छा है, लेकिन इसका मतलब है कि प्रति पंक्ति केवल एक ही मैच होगा (अंतिम संभावित मैच)। मैं अभी भी pouty puppetदो मैचों की उपज की तरह एक लाइन चाहूंगा ।
18 दिसंबर को tommcdo
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.