使用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)