rx-to-string
ใช้แบบฟอร์ม regexp เป็นอาร์กิวเมนต์ rx
ไวยากรณ์เป็นเช่นเดียวกับข้อโต้แย้งของ
(rx-to-string '(or "foo" "bar"))
"\\(?:\\(?:bar\\|foo\\)\\)"
สิ่งที่คุณพยายามผ่านไม่ใช่แบบฟอร์ม regexp แต่รายการแบบฟอร์ม regexp เนื่องจากสิ่งที่คุณหมายถึงคือลำดับของนิพจน์ทั่วไปที่symbol-start
ตามมาด้วยหนึ่งในสตริงที่ตามมาsymbol-end
คุณจึงต้องนำด้วยตัวดำเนินการลำดับsequence
(ซึ่งสามารถย่อseq
หรือ:
หรือแปลก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\\)\\_>"