是否可以为emacs添加自己的字符类,以便在正则表达式中使用它们?
让我们说,我想添加一个类[[:consonant:]]
,它匹配所有不是元音的字母,以避免一直写[b-df-hj-np-tv-z]
(是的,我知道我的快捷方式几乎与我想要避免的术语一样长,将其视为我问题的简化)。
这是否可行或者我是否必须分别使用format
或concat
?如果有可能,我该怎么做?
MWE可能是这样的:
(defun myfun ()
"Finds clusters of three or more consonants"
(interactive)
(if (search-forward-regexp "[b-df-hj-np-tv-z]\\{3,\\}")
(message "Yepp, here is a consonant cluster.")
))
(defun myfun-1 ()
"Should also find clusters of three or more consonants."
(interactive)
(if (search-forward-regexp "[[:consonant:]]\\{3,\\}")
(message "Yepp, here is a consonant cluster.")
))
myfun
和myfun-1
这两个函数应该做同样的事情。
更进一步我想知道是否可以将整个表达式放在这样的"快捷方式"中,如
[[:ending:]] ==> "\\(?:en\\|st\\|t\\|e\\)"
答案 0 :(得分:0)
我不相信你能做到这一点。但是最近在ample-regexp package found HERE.中发布了类似的内容。这是从自述文件中作为例子:
(define-arx h-w-rx
'((h "Hello, ")
(w "world"))) ;; -> hello-world-rx
(h-w-rx h w) ;; -> "Hello, world"
(h-w-rx (* h w)) ;; -> "\\(?:Hello, world\\)*"
您可以使用它在一个大的define-arx中定义各种别名。