Answers:
rx-to-string
采用正则表达式形式作为参数。语法与的参数相同rx
。
(rx-to-string '(or "foo" "bar"))
"\\(?:\\(?:bar\\|foo\\)\\)"
您尝试传递的不是正则表达式表单,而是正则表达式列表。由于您的意思是正则表达式的序列,symbol-start
后跟一串字符串中的一个symbol-end
,所以您需要使用序列运算符sequence
(可以缩写为seq
or :
,或者甚至很奇怪and
)。
(rx-to-string `(: symbol-start (or ,@strings) symbol-end))
"\\(?:\\_<\\(?:ba[rz]\\|foo\\)\\_>\\)"
rx
实际上,它是一个很小的包装程序,rx-to-string
它在编译时起作用,因为它是一个宏。造成混淆的原因是,如果您向传递多个参数rx
,则会有一个隐式sequence
运算符。的文档rx
可能会有待澄清。
(rx (: symbol-start (or "foo" "bar" "baz") symbol-end))
"\\_<\\(?:ba[rz]\\|foo\\)\\_>"
(rx symbol-start (or "foo" "bar" "baz") symbol-end)
"\\_<\\(?:ba[rz]\\|foo\\)\\_>"