帮助Emacs正则表达式

时间:2010-01-19 12:10:35

标签: regex emacs

我的代码中都有这样的陈述:

LogWrite (String1,
          String2,
          L"=======format string======",
          ...
          );

我想将其中的每一项更改为:

LogWrite (String1,
          String2,
          L"format string",
          ...
          );

我正在尝试使用Emacs函数query-replace-regexp编写执行此操作所需的正则表达式,但尚未取得多大成功。求救!


更新: 1)如果不清楚,这个问题是特定于emacs的。

2)我想匹配从Log ...结束于);

开始的整个代码块

3)我使用以下reg-exp来匹配代码块:

L.*\n.*\n.*==.*;

我使用了re-builder来匹配这个正则表达式。使用\ n是因为我发现emacs会在新行停止匹配。问题是我不知道如何选择格式字符串并保存它以在替换regexp中使用它 - 因此regexp中的==。*部分。需要修改它以保存格式字符串。

3 个答案:

答案 0 :(得分:2)

如果您的格式字符串行中没有多个(或转义)双引号,则可以

//replace

L"=+(.*)=+"

//with 

L"\1"

更新:删除了懒惰的量词(感谢@tim)。确保正则表达式不是多行的;如果*匹配新行

,那么贪婪的.会导致非常糟糕的结果

答案 1 :(得分:1)

找出emacs正则表达式的一个很好的工具是:

M-x re-builder

文档中的简要说明:

  

调出re-builder' attaches itself to the current buffer which becomes its target buffer, where all the matching is done. The active window is split so you have a view on the data while authoring the RE. If the edited expression is valid the matches in the target buffer are marked automatically with colored overlays (for non-color displays see below) giving you feedback over the extents of the matched (sub) expressions. The (non-)validity is shown only in the modeline without throwing the errors at you. If you want to know the reason why RE Builder considers it as invalid call reb-force-update'(“\ C-c \ C-u”)时   应该揭示错误。

它内置于Emacs(自21年起)

对于Emacs正则表达式的语法,您可以阅读这些信息页面:

答案 2 :(得分:0)

/={7}(.*)={6}/\1/

这应该做。