正则表达式完成替换功能(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++中同时查找多个关键字
比如想查找文件中包含“u32_t”或者“u16_t”的所有行,查找方式选择“正则表达式查找”,可以用notepad++输入“(u32_t)\s|(u16_t)\s”或者简单输入“u32_t|u16_t”查找即可,如下图所示。
对于想一次查找多个关键字的情况,只需在查找目标框中输入或关系多个关键字,点击查找即可,“|”号前后无空格。
在使用NotePad++ 正则表达式时参考了下面的文章:
NotePad++ 正则表达式替换 高级用法(博客);
Regular Expressions;
NotePad++ 正则表达式替换 高级用法();
正则表达式 - 教程;