我在使用 rx 构建正则表达式的时候遇到了这样一个问题:
我需要匹配到一个字符串中的任意一个字符,但要求是这个字符串可以是自定义的,我定义了一个变量来表示这个字符串,但如果在 any 后直接跟这个变量的话会报错
(setq t1 "abc")
(rx (any "abc"))
;; => "[a-c]"
(rx (any t1))
;; => rx--parse-any: Invalid rx ‘any’ argument: t1
;; 使用 literal/regexp 可以在运行 rx 时计算 lisp
;; 但会导致定义变量时必须以正则的形式来写
(rx (any (literal t1)))
;; => rx--parse-any: Invalid rx ‘any’ argument: (literal t1)
(rx (regexp t1))
;; => "abc"
;; 以正则的形式定义变量
(setq t2 "[abc]")
(rx (regexp t2))
;; => "[abc]"
想知道有没有办法是定义变量时就是单纯字符串,不用写正则的形式?
现在比较费劲的解决办法是
(rx (regexp (concat "[" t1 "]")))
;; => "[abc]"
不知道大家有没有更好的解决方法?