gpt4 book ai didi

regex - Emacs Lisp 相当于 JavaScript 的 RegExp#exec

转载 作者:行者123 更新时间:2023-12-04 20:01:03 24 4
gpt4 key购买 nike

有什么方法可以在 Emacs Lisp 中提取正则表达式的组吗?

例如,如何使用正则表达式从“std1”中获取“std”和“1”

^\(std\|bcp\|fyi\)\([0-9]+\)$

喜欢 JavaScript

/^(std|bcp|fyi)([0-9]+)$/.exec("std1")[1]  //= std
/^(std|bcp|fyi)([0-9]+)$/.exec("std1")[2] //= 1

http://www.gnu.org/software/emacs/manual/html_node/elisp/Regexp-Functions.html#Regexp-Functions我阅读了此页面,但无法理解如何实现这一目标。

最佳答案

要添加到其他答案,您可能需要记住整个 (when (string-match ...) (do-something-with (match-string ...)))模式作为成语。示例:

(let ((str "std1")
(reg (rx bos
(group (or "std" "bcp" "fyi"))
(group (+ digit))
eos)))
(when (string-match reg str)
(list :1 (match-string 1 str)
:2 (match-string 2 str))))

⇒ (:1 "std" :2 "1")

此外,s.el 库中的 s-match 将子匹配项收集到一个列表中:

(require 's)
(let ((str "std1")
(reg (rx bos
(group (or "std" "bcp" "fyi"))
(group (+ digit))
eos)))
(s-match reg str))

⇒ ("std1" "std" "1")

然后你可以像这样访问元素:

(require 's)
(require 'dash)

(let ((str "std1")
(reg (rx bos
(group (or "std" "bcp" "fyi"))
(group (+ digit))
eos)))
(--when-let (s-match reg str)
(list :1 (elt it 1)
:2 (elt it 2))))

⇒ (:1 "std" :2 "1")

在所有三个片段中,如果匹配失败,返回值为 nil。

关于regex - Emacs Lisp 相当于 JavaScript 的 RegExp#exec,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20162573/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com