Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用rx在Emacs中创建shy组?_Emacs_Elisp - Fatal编程技术网

如何使用rx在Emacs中创建shy组?

如何使用rx在Emacs中创建shy组?,emacs,elisp,Emacs,Elisp,通常,我可以使用优秀的rx宏来创建可读的正则表达式,并确保转义了正确的元字符 (rx (any "A-Z")) ;; "[A-Z]" 但是,我不知道如何创建害羞群体,例如\(?:AB\)rx有时在其输出中产生它们: (rx (or "ab" "bc")) ;; "\\(?:ab\\|bc\\)" 但我想明确地添加它们。我可以做到: (rx (regexp "\\(?:AB\\)")) 但这违背了rx的观点 在一个完美的世界里,我希望能够写: (rx (shy-group "A")) 我会

通常,我可以使用优秀的
rx
宏来创建可读的正则表达式,并确保转义了正确的元字符

(rx (any "A-Z")) ;; "[A-Z]"
但是,我不知道如何创建害羞群体,例如
\(?:AB\)
rx
有时在其输出中产生它们:

(rx (or "ab" "bc")) ;; "\\(?:ab\\|bc\\)"
但我想明确地添加它们。我可以做到:

(rx (regexp "\\(?:AB\\)"))
但这违背了
rx
的观点

在一个完美的世界里,我希望能够写:

(rx (shy-group "A"))
我会满足于这样的事情(这些工作都没有):


如何使用
rx
创建包含shy组的正则表达式?

我认为
rx
表单的结构消除了显式创建shy组的任何需要—shy组可能需要的所有内容都由其他语法解释

e、 g.你自己的例子:

(rx(或“ab”“bc”);;“\\(?:ab\\\\\\\ bc\)”

对于其他情况,也可以

示例(取自上面的EmacsWiki链接):


rx
表单的结构是否使显式害羞组变得多余?在什么情况下你需要这个?哦,我没想到。当我想重写一些字符串正则表达式以使用
rx
时,我需要它。是否总是可以在
rx
中重写任意正则表达式而无需显式分组?(你也基本上回答了这个问题,所以你想提交一个答案吗?)根据图书馆的评论,它说“Rx完全覆盖了所有的regexp特性”,我相信应该是这样的。
;; sadly, `regexp` only accepts literal strings
(rx (regexp (format "\\(?:%s\\)" (rx WHATEVER))))

;; also unfortunate, `eval` quotes the string it's given
(rx (eval (format "\\(?:%s\\)" (rx WHATEVER))))
(defmacro rx-extra (&rest body-forms)
   (let ((add-ins (list
                   `(file . ,(rx (+ (or alnum digit "." "/" "-" "_"))))
                   `(ws0 . ,(rx (0+ (any " " "\t"))))
                   `(ws+ . ,(rx (+ (any " " "\t"))))
                   `(int . ,(rx (+ digit))))))
     `(let ((rx-constituents (append ',add-ins rx-constituents nil)))
        ,@body-forms)))