वास्तव में चार अलग re-builder
- अलग वाक्यविन्यास विकल्प हैं, और आप उनके बीच स्विच कर सकते हैंC-cTAB
दो sexp-form regexp संकलक के लिए हैं rx
और sregex
(लेकिन जैसा कि पूर्व अधिक व्यापक और लगभग पूरी तरह से वाक्यविन्यास-संगत है, आप वास्तव में sregex को अनदेखा कर सकते हैं जब तक कि आप पुराने कोड के साथ काम नहीं करते हैं जो इसका उपयोग करते हैं)।
अन्य दो वाक्यविन्यास विकल्प हैं read
(डिफ़ॉल्ट) और string
(जो वाक्यविन्यास आप अंतःक्रियात्मक रूप से उपयोग करते हैं)।
read
के रूप में तुतलाना पाठक द्वारा मान्यता प्राप्त यानी - - वाक्य रचना 'कोड' वाक्य रचना है जिसमें आप के अनुसार regexp दर्ज स्ट्रिंग्स के लिए पढ़ने के लिए वाक्य रचना :
C-hig (elisp) Syntax for Strings
RET
string
वाक्य रचना (जो मैं हमेशा इस संदर्भ में एक अनावश्यक रूप से भ्रामक नाम पर विचार किया है) एक नियमित अभिव्यक्ति स्ट्रिंग की वाक्य रचना है जो पहले से ही पढ़ कर दिया गया है , और जो इसलिए चरित्र के किसी भी नहीं है बचाव के लिए आवश्यक है जब लेखन स्ट्रिंग। जो कहना है, यह वास्तविक नियमित अभिव्यक्ति सिंटैक्स है, जैसा कि आप उपयोग करते हैं जब Emacs आपको अंतःक्रियात्मक रूप से संकेत देता है।
यदि आप डिफ़ॉल्ट रूप से स्ट्रिंग सिंटैक्स का उपयोग करना चाहते हैं, तो अपनी इनिट फ़ाइल में निम्नलिखित जोड़ें, या उपयोग करें M-x customize-option
RET reb-re-syntax
RET
(setq reb-re-syntax 'string)
ध्यान दें कि आप regexp को संपादित करते समय रीड और स्ट्रिंग सिंटैक्स के बीच आगे और पीछे स्विच कर सकते हैं, जिसमें डेटा की कोई हानि नहीं होती है। तुम भी बदल सकते हैं से पढ़ने के लिए / स्ट्रिंग वाक्य रचना sexp रूपों (स्वाभाविक रूप से, तार करने के लिए sexps संकलन क्या उन पुस्तकालयों के लिए कर रहे हैं), लेकिन आप दूसरी दिशा में नहीं जा सकते हैं और एक तार से एक sexp उत्पन्न कर सकते हैं। री-बिल्डर को याद है कि सेक्सप क्या था, इसलिए जब आप सिंटैक्स बदलते हैं तो आप उस फॉर्म को नहीं खोते हैं ; लेकिन यह भी अद्यतन नहीं होता है यदि आप एक अलग वाक्यविन्यास में regexp को संशोधित करते हैं और फिर वापस बदलते हैं। संक्षेप में, यदि आप एक सेक्सप के रूप में regexp का निर्माण कर रहे हैं, तो सुनिश्चित करें कि आप उस वाक्य रचना का उपयोग करते समय केवल इसे संपादित करते हैं।
rx
समर्थन के साथ एक गोटा यह है कि यह वास्तव में rx-to-string
फ़ंक्शन का उपयोग कर रहा है, जो rx
कोड में मैक्रो का उपयोग करने के लिए काफी समान नहीं है । rx
मनमाने ढंग से संख्या तर्क को स्वीकार करता है और उन्हें एक निहित अनुक्रम के रूप में मानता है , जबकि rx-to-string
केवल एक ही रूप को स्वीकार करता है, और किसी भी शीर्ष-स्तरीय अनुक्रम को स्पष्ट '(sequence ...)
या समतुल्य बनाया जाना चाहिए ।
संक्षेप में, जब आप '(...)
री-बिल्डर में एक फॉर्म दर्ज करते हैं , तो इसे संसाधित किया जाता है (rx-to-string '(...))
और नहीं(rx ...)
यह भी ध्यान रखें कि अवैध रूप re-builder
से संबंधित बफर में मैचों को गतिशील रूप से अपडेट करने से रोकने के लिए, भले ही फॉर्म को फिर से वैध बना दिया जाए। C-cC-uबंधन के लिए reb-force-update
इन स्थितियों को हल करने के लिए उपयोगी है।
डिफ़ॉल्ट रूप से मोड लाइन "रे बिल्डर" का उपयोग करते समय read
या string
सिंटैक्स का उपयोग करता है, और "रे बिल्डर लिस्प" का उपयोग rx
या sregex
सिंटैक्स करते समय , लेकिन उपयोग में विशिष्ट सिंटैक्स की पहचान करने के लिए यह कहीं अधिक उपयोगी लगता है (विशेष रूप से read
और बीच में अंतर करने के लिए string
)।
यदि आप delight
GNU ELPA से पैकेज स्थापित करते हैं , तो आप सिंटैक्स इंडिकेटर को मोड लाइन में जोड़ने के लिए निम्नलिखित का उपयोग कर सकते हैं।
(let ((name '("Regexp[" (:eval (symbol-name reb-re-syntax)) "]")))
(delight `((reb-mode ,name :major)
(reb-lisp-mode ,name :major))))
यह read
सिंटैक्स में "Regexp [रीड]" मोड का नाम बदल देता है , और इसी तरह दूसरों के लिए।
या ऊपर वर्णित rx
बनाम rx-to-string
गेटा के लिए एक संकेत शामिल करने के लिए , rx
सिंटैक्स का उपयोग करते समय मोड लाइन को "रेगेक्सप [आरएक्स-टू-स्ट्रिंग]" कहें।
(let ((name '("Regexp["
(:eval (symbol-name (if (eq reb-re-syntax 'rx)
'rx-to-string
reb-re-syntax)))
"]")))
(delight `((reb-mode ,name :major)
(reb-lisp-mode ,name :major))))