Emacs中的自定义角色类'正则表达式

时间:2014-06-27 14:29:27

标签: regex emacs elisp

是否可以为emacs添加自己的字符类,以便在正则表达式中使用它们?

让我们说,我想添加一个类[[:consonant:]],它匹配所有不是元音的字母,以避免一直写[b-df-hj-np-tv-z](是的,我知道我的快捷方式几乎与我想要避免的术语一样长,将其视为我问题的简化)。

这是否可行或者我是否必须分别使用formatconcat?如果有可能,我该怎么做?

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.")
))

myfunmyfun-1这两个函数应该做同样的事情。

更进一步我想知道是否可以将整个表达式放在这样的"快捷方式"中,如

[[:ending:]] ==> "\\(?:en\\|st\\|t\\|e\\)"

1 个答案:

答案 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中定义各种别名。