我正在尝试在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)
最终匹配整个文件中所有内容的每个排列。
答案 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 ++演示:
我相信
查找内容:$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