Emacs query-replace-regexp multiline

Nei*_*kar 26 regex emacs

你如何在Emacs中进行查询替换-regexp,它将匹配多行?

作为一个简单的例子,我想要<p>\(.*?\)</p>匹配

<p>foo
bar
</p>
Run Code Online (Sandbox Code Playgroud)

Tre*_*son 23

M-x re-builder
Run Code Online (Sandbox Code Playgroud)

是你的朋友.它引导我到这个正则表达式:

"<p>\\(.\\|\n\\)*</p>"
Run Code Online (Sandbox Code Playgroud)

这是.的字符串版本

<p>\(.\|^J\)*</p>         ;# where you enter ^J by C-q C-j
Run Code Online (Sandbox Code Playgroud)

当我重新搜索时,这对我有用,但不是在我做的时候'query-replace-regexp.不确定为什么......

现在,当做一个're-search-forward(aka C-u C-s)时,你可以输入M-%哪个会提示你替换(从Emacs 22开始).因此,您可以使用它来进行搜索并替换上面的正则表达式.

注意,上面的regexp将匹配到缓冲区中的最后一个 </p>,这可能不是你想要的,所以使用re-builder来构建一个更接近你想要的正则表达式.显然,正则表达式不能计算括号,因此您可以自行计算 - 取决于您想要的解决方案的强大程度.


Boo*_*jum 21

尝试角色课程.只要您只使用ASCII字符集,就可以使用[[:ascii:]]而不是点.使用更长的时间[[:ascii:][:nonascii:]]应该为一切工作.