मैं Emacs में अंतःक्रियात्मक रूप से नियमित भावों के साथ खोजने और बदलने का अभ्यास कैसे कर सकता हूं?


12

नियमित अभिव्यक्तियों का उपयोग करके खोज करना और बदलना स्पष्ट रूप से Emacs उपयोगकर्ता के लिए एक शक्तिशाली उपकरण है जो नियमित रूप से इन क्रियाओं को कर सकता है। हालांकि, Emacs (और / या प्रोग्रामिंग) शुरुआत के रूप में, नियमित अभिव्यक्तियों को सीखने और अभ्यास करने की आवश्यकता होती है।

मैं जानने के लिए और नियमित अभिव्यक्ति को प्रशिक्षित कर सकते सहभागी Emacs में, इसी तरह करने के लिए निर्मित Emacs ट्यूटोरियल? यदि नहीं, तो खोज और प्रतिस्थापन के लिए नियमित अभिव्यक्ति के उपयोग के अभ्यास के लिए Emacs का उपयोग करने के लिए अन्य सुझाव क्या हैं?


1
यह दस्तावेज़ थोड़े पूर्ण है: wikemacs.org/wiki/Regexp
एह्वींस

जवाबों:


17

इसके अलावा regexp-builderआप दृश्य-रेगेक्सप पर भी विचार कर सकते हैं जो आपको प्रगति पर दृश्य प्रतिक्रिया प्रदान कर सकता है:

दृश्य- regexp स्नैपशॉट


3
या यहां तक ​​कि anzu, जो समान और अधिक करता है।
पवित्रता

16

आप कोशिश कर सकते हैं M-x regexp-builder RETजो एक इंटरैक्टिव नियमित अभिव्यक्ति मिलान है, यह बुरा नहीं है


7
जब C-gआप उम्मीद से बाहर नहीं निकलते तो घबराएं नहीं। C-c C-qजब आप अभ्यास कर रहे हों तो regexp बिल्डर को छोड़ने के लिए डिफ़ॉल्ट कीबाइंडिंग है।
nispio

5

मैं उपयोग regexp-builderकरता हूं जो आप इंटरगेप्स को इंटरेक्टिव रूप से परीक्षण करते हैं और प्रतिक्रिया प्राप्त करते हैं। और हां, एक बार जब मैंने उसका उपयोग करना शुरू कर दिया, तो मैंने तुरंत अपने आप से पूछा "मैं इस regexp को कैसे खिलाऊँ query-replace-regexp?"

मैंने जो उत्तर चुना, वह EmacsWiki ReBuilder पृष्ठ पर परिभाषित निम्नलिखित फ़ंक्शन है ।

(defun reb-query-replace (to-string)
  "Replace current RE from point with `query-replace-regexp'."
  (interactive
   (progn (barf-if-buffer-read-only)
          (list (query-replace-read-to (reb-target-binding reb-regexp)
                                       "Query replace"  t))))
  (with-current-buffer reb-target-buffer
    (query-replace-regexp (reb-target-binding reb-regexp) to-string)))

तो मेरा वर्कफ़्लो है:

  1. M-x re-builder
  2. टाइप प्रकार
  3. M-x reb-query-replace

3

जब एक regexp के किन हिस्सों से मिलान होता है, यह देखने के लिए regexps का उपयोग करना सीखते समय यह एक जबरदस्त मदद हो सकती है - विशेष रूप से, regexp समूहों। और अंतःक्रियात्मक और वृद्धिशील रूप से करने के लिए।

@ Immerr के जवाब की पंक्तियों के साथ, Icicles खोज समान पड़ा है हाइलाइटिंग एक लंबे समय के लिए।

यहाँ छवि विवरण दर्ज करें



1

Emacs के भीतर नहीं, लेकिन http://rubular.com/ मूल रूप regexp-builderसे एक चीट-शीट के साथ है। आप एक उदाहरण सेट कर सकते हैं और इसने उस उदाहरण के लिंक को थूक दिया है । मैं एक टीम के साथ regex पर चर्चा करते समय इसका उपयोग करता हूं।


1
क्या रूबी इमैक-फ्लेवर्ड रेगेक्सपी का उपयोग करता है?
nispio

1

डेव एफ के विकल्प के रूप में regexp-builderआप मनमाने ढंग से पाठ के खिलाफ मिलान करने के लिए पैटर्न बना सकते हैं।

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

आप जिस प्रतिस्थापन को चाहते हैं उसे करने के लिए एक नियमित अभिव्यक्ति का उपयोग करना (query-replace-regexp)( C-M-%) और बनाना आपको अभ्यास करने में मदद करेगा।


किसी ऐसे व्यक्ति को क्या लाभ मिलता है जो नियमित रूप से "अभ्यास" करना चाहता है जो regexp-builderपहले से ही पेश नहीं करता है? इसके साथ समस्या query-replace-regexpयह है कि आपको संपूर्ण regexp लिखने की आवश्यकता है और फिर यह पता लगाने के लिए कि वह क्या मेल खाता है। यदि आपको वह परिणाम पसंद नहीं है तो आपको फिर से शुरू करना होगा। regexp-builderमक्खी पर मैच दिखाता है जो आपके regexp को तब तक आसान बनाता है जब तक कि यह काम नहीं करता है अगर आपको नहीं पता कि आप क्या कर रहे हैं।
nispio

1
मैं मानता हूँ कि यह नकारात्मक पक्ष है। हालांकि अगर आप नियमित अभिव्यक्ति से परिचित हैं, तो आप query-replace-regexpइसे Emacs में विशेष रूप से उपयोग करने के लिए उपयोग करेंगे
जोनाथन लीच-पेपिन

शायद ... लेकिन यह ऐसा प्रतीत नहीं होता है कि ओपी क्या पूछ रहा है। "यदि आप नियमित अभिव्यक्तियों से परिचित हैं," तो आपको वास्तव में नियमित अभिव्यक्ति सीखने की आवश्यकता नहीं है ।
nispio

1
ओपी पूछ रहा है कि कैसे सीखना है कि कैसे / कब उन्हें एक एमएसीएस शुरुआत के रूप में अंतःक्रियात्मक रूप से उपयोग करना है। उनके पास पहले से ही अन्य प्रकार के regexp से कुछ regexp ज्ञान हो सकता है।
जोनाथन लीच-पेपिन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.