Emacs使用正则表达式regex需要额外的转义吗?

正则表达式新手,但到了emacs里更加迷茫了,比如下文

(I) 111
(I) 111
(I) 111
(I) 111
(I) 111
(I) 111
(I) 111
(I) 111
(I) 111
(I) 111
(I) 111
(II) 111
(II) 111
(II) 111
(II) 111
(II) 111
(II) 111
(II) 111
(II) 111
(II) 111
(II) 111
(II) 111
(II) 111
(II) 111
(III) 111
(III) 111
(III) 111
(III) 111
(III) 111
(III) 111
(III) 111
(III) 111
(III) 111
(III) 111
(III) 111

我想要匹配所有的(I) ,(II) ,(III) (包括后面的空格),query-replace-regexp输入\(I+\) (带空格),没有匹配到的候选项,输入\(I+\)(不带空格)则匹配到了所有的I,是在哪里需要额外的转义,把\或者(也转义掉吗?

(不需要转义

test

啊感谢!原来如此吗,可是在regex中,()的效果不是捕获吗,在emacs中的语法有一些不同?

在有一些正则引擎中,(确实是group的意思,Emacs的正则我记得是跟其他语言有一些不一样的,具体区别可以Google一下。

要完全了解 regex 规则需要读 emacs 或 elisp 的 info. 但很多时候你需要的是快捷地尝试出来合适的 regex, 如果你用 ivy 则 swiper 本身就能很快试错, 第二快的方法是 re-builder.

也是(

不过表示group得 \(xxx\)

(和很多语言刚好相反

另外可以用 rx 来build regex string

3 个赞
(rx "(" (one-or-more "I") ")" (zero-or-more whitespace))
;; => "(I+)[[:space:]]*"
4 个赞