版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/helaisun/article/details/81021518
正则表达式完成替换功能(NotePad++和SourceInsight)
最近在用SI看网上下载的代码时,遇到很多对类型进行了变态重定义的情况,类似如下代码:
// VAR(int_T, void)实际上等价于int_T,int_T是已定义的类型。
VAR(int_T, void) Device_Add( DeviceType *devPtr ) {
}
VAR(uintT, void) arc_putchar( int c, FILE *file ) {
Sys.ConsoleDevicePtr->read( )
return fgetc(file);
}
VAR(uint8, void) arc_putchar( int c, FILE *file ) {
}
VAR(int_T, void) arc_putchar( int c, FILE *file ) {
}
VAR(int_T, void) arc_putchar( int c, FILE *file ) {
}
看到如上代码,就想通过自动化的方式把“VAR(int_T, void)”换成“int_T”,把“VAR(uint8, void)”换成“uint8”等,
于是就想到了正则表达式,看了几篇博文,分别尝试了在SourceInsight和NotePad++下进行转化的方式,两者正则表达式有很多通用的地方,但也发现两点有区别的:
- SourceInsight的正则表达式默认是非贪心匹配,而NotePad++正好相反,所以有必要使用非贪心匹配符号“?”。
- SourceInsight和NotePad++的正则表达式在括号的使用上也不尽相同,见下面的例子。估计还有其他有差异的使用方法。
要完成将上面代码中“VAR(int_T, void)”换成“int_T”的功能,在SourceInsight和NotePad++下的操作如下:
// 在NotePad++ 上使用Ctrl+H ,输入下面的命令去替换,具体如下:
VAR\((.*?),[[:blank:]](.*?)\) // 查找目标中输入
\1 // 替换为中输入
// 在SourceInsight中使用 Ctrl+H 在其中输入命令完成替换:
VAR(\(.*?\), \(.*?\)) // old中输入
\1 // new中输入
// 需要注意的是都需要在界面中选中 “使用正则表达式”
NotePad++ 中的图例:
SourceInsight中的图例:
在使用NotePad++ 正则表达式时参考了下面的文章: