原文位址:https://www.lujun9972.win/blog/2020/11/23/使用xr幫助分析elisp正規表達式/index.html
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)