rx-to-string
mengambil bentuk regexp sebagai argumen. Sintaksnya sama dengan argumen dari rx
.
(rx-to-string '(or "foo" "bar"))
"\\(?:\\(?:bar\\|foo\\)\\)"
Apa yang Anda coba lewati bukanlah formulir regexp, tetapi daftar form regexp. Karena yang Anda maksud adalah urutan ekspresi reguler symbol-start
diikuti oleh salah satu dari sekelompok string diikuti oleh symbol-end
, Anda harus memimpin dengan operator urutan sequence
(yang dapat disingkat menjadi seq
atau :
, atau bahkan aneh and
).
(rx-to-string `(: symbol-start (or ,@strings) symbol-end))
"\\(?:\\_<\\(?:ba[rz]\\|foo\\)\\_>\\)"
rx
sebenarnya pembungkus kecil di sekitar rx-to-string
yang beroperasi pada waktu kompilasi karena makro. Apa yang membuat ini membingungkan adalah bahwa jika Anda melewati beberapa argumen rx
, ada sequence
operator implisit . Dokumentasi rx
dapat diklarifikasi.
(rx (: symbol-start (or "foo" "bar" "baz") symbol-end))
"\\_<\\(?:ba[rz]\\|foo\\)\\_>"
(rx symbol-start (or "foo" "bar" "baz") symbol-end)
"\\_<\\(?:ba[rz]\\|foo\\)\\_>"