elisp regexp 在字符串中搜索,而不是在缓冲区中

发布于 2024-09-10 02:49:03 字数 173 浏览 7 评论 0原文

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

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

I have been searching everywhere in the emacs lisp documentation for how to regular expressions search into a string. All I find is how to do this in buffers.

Is there something I'm missing? Should I just spit my string into a temporary buffer and search for it there? Is this just the coding style of elisp, something I'll get used to? Is there a standard solution to this problem. Manipulating buffers seems cludgy when I should just be able to search straight into a variable already present.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

优雅的叶子 2024-09-17 02:49:03

这里讨论了 Emacs wiki 中的字符串内容与缓冲区内容。 只需存储您的字符串即可作为变量。

关于字符串的棘手之处在于,您通常不会修改字符串本身(除非您执行 array字符串上的函数,因为字符串是一个数组,但这通常应该避免),但您返回修改后的字符串。

无论如何,这是一个在 elisp 中使用字符串的示例。

这将从字符串末尾删除空格:

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

Here is a discussion of string content vs buffer content in the Emacs wiki. Just store your string as a variable.

The tricky thing about strings is that you generally do not modify the string itself (except if you perform array functions on string, since a string is an array, but this should generally be avoided), but you return the modified string.

At any rate, here is an example of using a string in elisp.

This will trim the whitespace from the end of a string:

(setq test-str "abcdefg  ")
(when (string-match "[ \t]*$" test-str)
    (message (concat "[" (replace-match "" nil nil test-str) "]")))
独守阴晴ぅ圆缺 2024-09-17 02:49:03

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

The function you're looking for is string-match. If you need to do the matching repeatedly, use the index it returns as the optional "start" parameter for the next call. The documentation is in the ELisp manual, chapter "Regular Expression Searching".

遮了一弯 2024-09-17 02:49:03

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

To replace every regexp match in a string take a look at replace-regexp-in-string.

浪推晚风 2024-09-17 02:49:03

搜索字符串的开头

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

To search the beginning of a string

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

To search the end of a string

(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))
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文