我一直在emacs lisp文档中搜索如何将正则表达式搜索到字符串中。我找到的只是如何在缓冲区中执行此操作。
有什么我想念的吗?我应该将我的字符串吐入临时缓冲区并在那里搜索它吗?这只是elisp的编码风格,我会习惯吗?有没有这个问题的标准解决方案。当我应该能够直接搜索已存在的变量时,操作缓冲区似乎很复杂。
答案 0 :(得分:28)
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) "]")))
答案 1 :(得分:12)
您正在寻找的功能是string-match
。如果需要重复进行匹配,请使用它返回的索引作为下一次调用的可选“start”参数。该文档位于ELisp手册的“正则表达式搜索”一章中。
答案 2 :(得分:3)
要替换字符串中的每个正则表达式匹配,请查看replace-regexp-in-string
。
答案 3 :(得分: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))