rx-to-string
argüman olarak normal ifade formunu alır. Sözdizimi, argümanıyla aynıdır rx
.
(rx-to-string '(or "foo" "bar"))
"\\(?:\\(?:bar\\|foo\\)\\)"
Geçmeye çalıştığınız şey normal ifade formu değil, normal ifade formlarının listesidir. Ne demek istediğiniz düzenli ifadeler dizisi ve symbol-start
onu takip eden bir dizi dizge symbol-end
olduğu için, dizi işleciyle sequence
( seq
veya kısaca :
veya garip bir şekilde kısaltılabilir and
) yönlendirmeniz gerekir.
(rx-to-string `(: symbol-start (or ,@strings) symbol-end))
"\\(?:\\_<\\(?:ba[rz]\\|foo\\)\\_>\\)"
rx
aslında rx-to-string
derleme zamanında çalışan küçük bir sargıdır çünkü bir makrodur. Bu kafa karıştırıcı kılan şey, eğer birden fazla argüman rx
iletirseniz, örtük bir sequence
işleç olmasıdır. Dokümantasyonu rx
açıklığa kavuşturulabilir.
(rx (: symbol-start (or "foo" "bar" "baz") symbol-end))
"\\_<\\(?:ba[rz]\\|foo\\)\\_>"
(rx symbol-start (or "foo" "bar" "baz") symbol-end)
"\\_<\\(?:ba[rz]\\|foo\\)\\_>"