क्या elisp में regexp शाब्दिक है?


14

मेरे regexps बैकस्लैश की सरासर संख्या बहुत पागल है। क्या elisp में regexp शाब्दिक है, इसलिए मैं कुछ लिख सकता हूं

rx"some\(regexp\)"

के बजाय

"some\\(regexp\\)"

Emacs जैसे कुछ regexp निर्माणों पर प्रकाश डाला गया \\|, \\(और \\)। दुर्भाग्य से, कई विषयों में यह दिखाई नहीं देता है। आप ओवरराइड कर सकते हैं font-lock-regexp-grouping-backslashऔर font-lock-regexp-grouping-constructइसे और अधिक विशिष्ट बना सकते हैं ।
लिंडकेसर

2
मैंने कच्चे स्ट्रिंग शाब्दिकों का समर्थन करने के लिए एक पैच बनाया है, लेकिन देवता रुचि नहीं रखते हैं।
knarf

1
आप हमेशा यह बता
glucas

@knarf यह शर्म की बात है कि स्टीफन को कच्चे स्ट्रिंग समर्थन में कोई दिलचस्पी नहीं थी, क्योंकि कच्चे तार एक नए रेगेक्स सिंटैक्स (जो मैं इसके पक्ष में होगा) के लिए एक पूरक होगा, न कि प्रतिस्थापन।
नोजफ्रोग

जवाबों:


13

एक विकल्प का उपयोग करना है rx मैक्रो अपने भावों का निर्माण करने के लिए है।

आपका उदाहरण बन जाता है (rx "some" (group "regexp"))

यहाँ rx.el में कमेंट्री सेक्शन के कुछ और उदाहरण हैं, एक विचार पाने के लिए कि कैसे rx काम करता है :

यह ^;;\\s-*\n\\|^\n बन जाता है

(rx (or (and line-start ";;" (0+ space) ?\n)
        (and line-start ?\n)))

यह [ \t\n]*:\\([^:]+\\|$\\) बन जाता है

(rx (and (zero-or-more (in " \t\n")) ":"
         (submatch (or line-end (one-or-more (not (any ?:)))))))

2
@Knarf के संपादन के लिए धन्यवाद! मैं अपने फोन पर था और एक उदाहरण में नहीं डालना चाहता था कि मैं गलत हो सकता हूं। :-)
ग्लूकोज

हम वास्तव में कई लिपियों को स्थानांतरित करने की प्रक्रिया में हैं जो बहुत सारे रीजैक्स खोज का उपयोग करते हैं और rxवाक्यविन्यास के कारण पर्ल से एलीस्प की जगह लेते हैं , जो उन्हें बनाए रखना आसान बनाता है। इम्हो, इसी तरह के मामलों के लिए, आरएक्स सिंटैक्स अपने आप में सटीक रूप से पर्ल पायथन, रूबी, आदि के लिए एक अच्छी तरह से योग्य विकल्प बनाता है। धन्यवाद।
gsl

7

नहीं, इसमें रेगेक्सप शाब्दिक नहीं है, लेकिन कई लोग pcre2el को एक सहायक विकल्प मानते हैं

विशेष रूप से इस तरह से इसका उपयोग कर रहे हैं:

(rxt-pcre-to-elisp "(abc|def)\\w+\\d+")
   ;; => "\\(\\(?:abc\\|def\\)\\)[_[:alnum:]]+[[:digit:]]+"

फिर भी आपको अपने बैकस्लैश को दोगुना करने की आवश्यकता है। आप औसत regexp के लिए बस के रूप में कई की जरूरत नहीं है।
cjm
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.