使用正则表达式在visual studio中选择由双换行分隔的文本块

时间:2016-02-11 14:58:11

标签: c++ regex visual-studio visual-studio-2015

我正在尝试在visual studio中编写一个正则表达式,它将捕获由双换行符分隔的任何文本块,因此我可以用Doxygen注释来包围它们。

namespace
{
   int a;
   int b;

   double c;
   double d;

   bool e;
   bool f;
}

成为:

namespace
{
   /** @{ */
   int a;
   int b;
   /** @} */

   /** @{ */
   double c;
   double d;
   /** @} */

   /** @{ */
   bool e;
   bool f;
   /** @} */
}

我已经尝试过来自this answer的解决方案,但即使未经修改(这不完全合适),visual studio也会给我一个错误

  

'无法完成操作。参数不正确。'

我也试过了:

(\r?\n){2}(.*\s)+(\r?\n){2}

只是无限期挂起,因为我认为(.*\s)最终匹配整个文件中所有内容的每个排列。

2 个答案:

答案 0 :(得分:1)

这是正则表达式,它可以在Notepad ++ 中完成您需要的,以及正确的缩进:

this

并替换为(^\s*namespace\b\s*\{|(?!^)\G)((?:\r?\n){2}([ \t]*)|(?:[ \t]*\r?\n)*([ \t]*))(\S[\S\s]*?)(?=[ \t]*(?:\s+\}|(?:\r?\n){2}))

请参阅regex demo和Notepad ++演示:

enter image description here

我相信

查找内容$1$2/** @{ */\r\n$3$4$5\r\n$3$4/** @} */
替换为(?<=^\s*namespace\b\s*\{(?:(?!\r?\n[ \t]*}\r?\n)[\S\s])*)((?:\r?\n){2}([ \t]*)|(?:[ \t]*\r?\n)*([ \t]*))(\S[\S\s]*?)(?=[ \t]*(?:\s+\}|(?:\r?\n){2}))

在VS2015 S&amp; R中应该also work,但是现在,$1/** @{ */\r\n$2$3$4\r\n$2$3/** @} */反向引用在这个正则表达式中根本不起作用,我找不到原因。

答案 1 :(得分:0)

从名称空间的左括号选择到结束括号(包括括号),以下正则表达式给了我想要的结果,包括空格:

发现:((?:\r?\n){2}|(\s*)\{?\s*)((\s+)\S[\S\s]+?)((?:\r?\n){2}|(?:\r?\n)\s*\})

REPLACE:$1$4/** @{ */\r\n$2$3\r\n$2$4/** @} */$5