原文地址:https://www.lujun9972.win/blog/2020/11/23/使用xr帮助分析elisp正则表达式/index.html
Elisp 的正则表达式语法以繁杂著称,分析起来特别麻烦。今天发现一个 xr
库非常好用,可以把Elisp正则表达式语法翻译成 rx
的格式,方便我们对其进行分析。 例如我们尝试使用 xr
对 org-heading-regexp
进行分析:
(seq bol(group(one-or-more "*"))(opt(one-or-more " ")(group(*? nonl)))(zero-or-more(any " "))eol)
从中可以很清楚的看到整个正则表达式分成5个部分:
bol
表示行首(group (one-or-more "*"))
一个或多个星号组成的分组(opt (one-or-more " ") (group (*? nonl)))
一个可选项,由一个或多个空格和任意多个非换行字符的分组(其中 *? 说明使用贪婪算法)组成。(zero-or-mode (any " "))
任意多个制表符或空格eol
表示行末
注意到,结果中有很多类似 bol
, nonl
, eol
这样的缩写,我们可以通过将第二个参数设置为 'verbose
来输出详细说明:
(xr org-heading-regexp 'verbose)
(seq line-start(group(one-or-more "*"))(zero-or-one(one-or-more " ")(group(*? not-newline)))(zero-or-more(any " "))line-end)