elisp 正则表达式搜索字符串,而不是缓冲区

Posted

技术标签:

【中文标题】elisp 正则表达式搜索字符串,而不是缓冲区【英文标题】:elisp regexp search in strings, not buffers 【发布时间】:2011-03-17 18:02:37 【问题描述】:

我一直在 emacs lisp 文档中到处搜索如何将正则表达式搜索到字符串中。我发现的只是如何在缓冲区中执行此操作。

我有什么遗漏吗?我应该把我的字符串吐到一个临时缓冲区并在那里搜索吗?这只是 elisp 的编码风格,我会习惯吗?这个问题有没有标准的解决方案。当我应该能够直接搜索已经存在的变量时,操作缓冲区似乎很麻烦。

【问题讨论】:

【参考方案1】:

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) "]")))

【讨论】:

【参考方案2】:

您要查找的函数是string-match。如果您需要重复进行匹配,请使用它返回的索引作为下一次调用的可选“开始”参数。该文档位于 ELisp 手册的“正则表达式搜索”一章中。

【讨论】:

【参考方案3】:

要替换字符串中的每个正则表达式匹配项,请查看replace-regexp-in-string

【讨论】:

【参考方案4】:

搜索字符串的开头

(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))

【讨论】:

以上是关于elisp 正则表达式搜索字符串,而不是缓冲区的主要内容,如果未能解决你的问题,请参考以下文章

mongo 正则表达式查询是不是有字符限制,如果正则表达式搜索字符串超过该限制,则会引发错误

SQL 基础正则表达式(二十三)

常用正则表达式

大括号之间的正则表达式搜索

如何检查正则表达式是不是未能在 docx 文件中找到搜索字符串

获取正则表达式匹配后的文本