你如何在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来构建一个更接近你想要的正则表达式.显然,正则表达式不能计算括号,因此您可以自行计算 - 取决于您想要的解决方案的强大程度.