哪些字符表示带有换行符的字符串的开头和结尾?我正在写一个修剪函数:
(defun trim (str)
(if (string-match "^[[:space:]]*\\(.+?\\)[[:space:]]*$" str)
(match-string 1 str)
str))
但是使用像“first / nnext”这样的字符串(来自shell-command-to-string
)它只返回“first”。参考手册说:
当匹配字符串而不是缓冲区时,'^'在开头匹配 字符串或换行符之后。
\\'
,左边是缓冲区的开头/结尾,所以它只是从字符串中返回任何内容。因此,如果可能的话,如何指出字符串的“绝对”开头?
答案 0 :(得分: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))