2011-09-27 112 views
3

指示字符串開頭和結尾的字符是什麼?我正在寫一個裝飾功能:Emacs正則表達式中字符串的開始和結尾

(defun trim (str) 
    (if (string-match "^[[:space:]]*\\(.+?\\)[[:space:]]*$" str) 
     (match-string 1 str) 
     str)) 

但隨着像「第一/ n下一個」(從shell-command-to-string有)的字符串返回只有「第一」。參考手冊中說:

當匹配字符串而不是緩衝區時,'^'匹配 字符串的開頭或換行符後面。

\\'而左邊的一個用於緩衝區的開始/結束,所以它只是簡單地從字符串中返回任何內容。因此,如果可能,如何指示字符串的「絕對」開始?

回答

4

這是\\`開始緩衝區或字符串。和\\'爲結束。看到manual

但是,我認爲你的禍害的根源不是錨。 [:space:] char類根據當前的語法表匹配不同的字符。要可靠地匹配非打印或打印字符,請使用[:graph:]。請參閱char class

另外.將不匹配換行符。

E.g.

(let ((str " \n a\nbc \n ")) 
    (string-match "\\`[^[:graph:]]*\\(\\(?:.\\|\n\\)+?\\)[^[:graph:]]*\\'" str) 
    (match-string 1 str)) 
+0

感謝您的糾正。然而,'\\'[[:space:]] * \\(。+?\\)[[:space:]] * \\''(在開始時使用「\\」)返回原始字符串,不要在開始和結束時切斷'\ n's。 –

+0

問題不在於錨點,而在於您的正則表達式。 [:space:]與換行符不匹配。我會修改我的答案。 –

+0

「'[:space:]'它匹配任何具有空白語法的字符(請參閱語法類表)。」 (http://www.gnu.org/software/emacs/elisp/html_node/Char-Classes.html)。 「語法類:空白字符...在幾乎所有主要模式中,空格,製表符,換行符和換頁符都被分類爲空格。」 (http://www.gnu.org/software/emacs/manual/html_mono/elisp.html#Syntax-Class-Table)。希望你的回答在這種情況下有所幫助。 –

相關問題