क्या एक विम रेगेक्स शाब्दिक को अलग-अलग जादू मोड में बदलने का एक तरीका है?


14

यदि मेरे पास एक स्ट्रिंग शाब्दिक में एक जादू विम रेगेक्स है, तो क्या पूरे रेगेक्स को वैकल्पिक प्रतिनिधित्व में बदलने का एक तरीका है जो एक अलग जादू मोड का उपयोग करता है, इसलिए मैं उस समकक्ष रेगेक्स को स्रोत कोड में पेस्ट कर सकता हूं?

उदाहरण के लिए, यदि मैं इस मैजिक-मोड पैटर्न को परिवर्तित करना चाहता हूं:

'\m-\=\<\d\+L\=\>\|0[xX][0-9a-fA-F]\+\>'

बहुत-जादू-मोड में इसे और अधिक पठनीय बनाने के लिए, कुछ इस तरह है:

'\v-=<\d+L=>|0[xX][0-9a-fA-F]+>'

मैं अक्सर गलतियों को हाथ से बदलने की कोशिश करता हूं।


मुझे एक की जानकारी नहीं है। क्या आपने हमेशा उन्हें एकल उद्धृत तारों में रखने की योजना बनाई है?
FDinoff

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

प्रश्न शीर्षक के विषय में, यह कठिन है, एक बहुत ही जादुई रेगेक्स [0-9]+को एक जादू के रूप में परिवर्तित करने के बारे में सोचें ... ;-)
केंट

इसलिए मैं इसके लिए एक प्लगइन बनाने की कोशिश कर रहा हूं , यह एक तरह का काम है लेकिन यह एकदम सही होने से दूर है। इसके अलावा संदर्भ के लिए वहाँ एक प्लगइन है जो धर्मान्तरित रूबी / पर्ल regex के लिए विम regex, कोड है ... विशाल: eregex
statox

1
@MuMind मुझे लगता है कि मुझे समझ में नहीं आ रहा है कि आप किस प्रकार की तुलना की तलाश कर रहे हैं :-) और प्लगइन के सुधार के बारे में, इसे बग का संकेत देने के लिए उपयोग गिट्टब का परीक्षण करने में संकोच न करें या यहां तक ​​कि पुल अनुरोध का सुझाव दें। मैं ख़ुशी से इसे देखूंगा!
statox

जवाबों:


3

आदेश

:s\v\\(\W)/\1/

किसी भी पैटर्न को \vमोड में बदलने के लिए पर्याप्त होना चाहिए । हालांकि यह 'lil' \mमार्कर को स्वैप नहीं करेगा - और मेरे ज्ञान के लिए जो एक एकल प्रतिस्थापन में असंभव है। यह मैन्युअल रूप से टाइप करने के लिए पर्याप्त छोटा है, और फिर आप बस :s/\\m/\\vमोड मार्कर के लिए कर सकते हैं ।

\Wवह शॉर्टहैंड है [^a-zA-Z0-9_]जिसके लिए बहुत ही जादुई विधा पर चलने वाले पात्रों का सेट (नकारात्मक) है। यह बस किसी भी बैकस्लैश को हटाता है तुरंत उन पात्रों में से एक को पूर्ववर्ती करता है। ज्ञात मुद्दा: यह \\अंदर के तारों को बदल देगा \। आप बदल सकते \Wके साथ \c[^a-z0-9\_]इस कम करने के लिए, लेकिन यह अभी भी गंदगी आपको आपकी regex शाब्दिक आप इसे कई बार चलाने के लिए और भी लंबे समय तक बच तार (युक्त पर असफल हो \\\\उदाहरण के लिए)

अद्यतन: मूल प्रश्न यह स्पष्ट नहीं करता है कि क्या आपको \vवापस बदलने की आवश्यकता है \m, लेकिन वहां कमांड है:

:s/\v(\\)@<!(\c[^a-z0-9\-\\\[\]\'_])/\\\2/
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.