2011-04-05 17 views
5

मैं हर तारीख को खोजने और इसके चारों ओर उद्धरण लगाने की कोशिश कर रहा हूं। मुझे लगा कि यह होना चाहिए:emacs के सिंटेक्स को प्रतिस्थापित करें- regexp

M-x replace-regexp 201\d-\d\d-\d\d <ret> '\&'

मैं भी कोशिश की [0-9] बजाय \d

यह काम नहीं करता है। लेकिन isearch-forward-regexp का उपयोग करके मैं [0-9][0-9] टाइप कर सकता हूं और लक्ष्य को हाइलाइट देख सकता हूं। मैं प्रतिस्थापन के साथ क्या गलत कर रहा हूँ?

उत्तर

9

Emacs regexps में [0-9] के लिए सामान्य \d शॉर्टेंड नहीं है।

मैं सिर्फ एक नया बफर में पाठ 2011-04-01 डाल दिया, वापस बफर की शुरुआत करने के लिए MX चला गया, और टाइप कियाreplace-regexpआरईटी201[0-9]-[0-9][0-9]-[0-9][0-9]आरईटी'\&'आरईटी, और तारीख थी जैसा कि अपेक्षित था, एकल उद्धरण से घिरा हुआ है।

5

\d Emacs नियमित अभिव्यक्ति वाक्यविन्यास में समर्थित नहीं है (C-h S regexp पर उन पर दस्तावेज़ है)। आप [0-9] का उपयोग कर सकते हैं जैसा आपने किया था, या POSIX शैली [[:digit:]] का उपयोग करें।

हालांकि, आपने जो किया ([0-9] के साथ) काम करना चाहिए था, और वास्तव में मेरे लिए काम किया था। यदि आप किसी प्रोग्राम में नियमित अभिव्यक्ति का उपयोग कर रहे हैं तो आपको M-x regexp-builder उपयोगी भी मिल सकता है।

+0

मुझे नहीं पता कि मैंने क्या गलत किया है, शायद मैं अवचेतन रूप से एम-% कर रहा था, मैंने खुद को कुछ बार ऐसा करने में पकड़ा। – Dov

0

आप -s से बचने के लिए आवश्यकता हो सकती है:

M-x replace-regexp <RET> 201[0-9]\-[0-9][0-9]\-[0-9][0-9] <RET> '\&'

0

दिया regexps ज्यादा शामिल हैं। निम्नलिखित "2014-01-33" जैसी अमान्य तिथियों से भी मेल खाएंगे, लेकिन बहुत से नहीं (मानते हैं YYYY-MM-DD ऑर्डरिंग):

"^ 20 [0-9] [0-9] - [ 0-1] [0-2] - [0-3] [0-9] "

या" 2014-11-33 "जैसी तिथियों से बचने के लिए (लेकिन" 2014-02-31 "जैसी नहीं) "2014-00-00"), आप थोड़ा अधिक प्रतिबंधक हो सकते हैं:

"^ 20 [0-9] [0-9] - [0-1] [0-2] - \ ([0- 2] [0-9] \ | 30 \ | 31 \) "

संबंधित मुद्दे