2010-07-19 8 views
36

मैं नियमित रूप से एक स्ट्रिंग में खोज को कैसे अभिव्यक्त करने के लिए emacs lisp दस्तावेज़ में खोज रहा हूं। मुझे लगता है कि बफर में यह कैसे करना है।तारों में elisp regexp खोज, बफर

क्या मुझे कुछ याद आ रही है? क्या मुझे अपनी स्ट्रिंग को अस्थायी बफर में थूकना चाहिए और वहां खोजना चाहिए? क्या यह सिर्फ elisp की कोडिंग शैली है, मैं कुछ उपयोग करने के लिए उपयोग किया जाएगा? क्या इस समस्या का एक मानक समाधान है। मैनिपुलेटिंग बफर लगते हैं जब मुझे सीधे पहले से मौजूद एक चर में खोज करने में सक्षम होना चाहिए।

उत्तर

25

Here is a discussion of string content vs buffer content in the Emacs wiki. बस अपनी स्ट्रिंग को चर के रूप में स्टोर करें।

मुश्किल बात about strings है कि आप आम तौर पर स्वयं स्ट्रिंग को संशोधित नहीं है (सिवाय अगर आप स्ट्रिंग पर सरणी कार्य करते हैं, के बाद से एक स्ट्रिंग एक सरणी है, लेकिन यह आम तौर पर बचा जाना चाहिए), लेकिन आप संशोधित स्ट्रिंग लौटाने।

किसी भी दर पर, यहां elisp में एक स्ट्रिंग का उपयोग करने का एक उदाहरण है।

यह एक स्ट्रिंग के अंत से खाली स्थान के ट्रिम जाएगा:

(setq test-str "abcdefg ") 
(when (string-match "[ \t]*$" test-str) 
    (message (concat "[" (replace-match "" nil nil test-str) "]"))) 
11

समारोह आप देख रहे हैं string-match है। यदि आपको बार-बार मिलान करने की आवश्यकता है, तो अगली कॉल के लिए वैकल्पिक "प्रारंभ" पैरामीटर के रूप में लौटने वाली अनुक्रमणिका का उपयोग करें। दस्तावेज ELISP मैनुअल, अध्याय "नियमित अभिव्यक्ति खोज" में है।

3

स्ट्रिंग में प्रत्येक regexp मिलान को प्रतिस्थापित करने के लिए replace-regexp-in-string पर एक नज़र डालें।

1

एक स्ट्रिंग

(defun string-starts-with-p (string prefix) 
    "Return t if STRING starts with PREFIX." 
    (and 
    (string-match (rx-to-string `(: bos ,prefix) t) 
        string) 
    t)) 

की शुरुआत खोज करने के लिए एक स्ट्रिंग के अंत खोज करने के लिए

(defun string-ends-with-p (string suffix) 
    "Return t if STRING ends with SUFFIX." 
    (and (string-match (rx-to-string `(: ,suffix eos) t) 
        string) 
     t))