使用xr帮助分析Elisp正则表达式
Elisp 的正则表达式语法以繁杂著称,分析起来特别麻烦。今天发现一个 xr 库非常好用,可以把Elisp正则表达式语法翻译成 rx 的格式,方便我们对其进行分析。
例如我们尝试使用 xr 对 org-heading-regexp 进行分析:
(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)
