正则表达式完成替换功能(NotePad++和SourceInsight)

正则表达式完成替换功能(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++ 中的图例:
正则表达式完成替换功能(NotePad++和SourceInsight)_第1张图片
SourceInsight中的图例:
正则表达式完成替换功能(NotePad++和SourceInsight)_第2张图片

NotePad++中同时查找多个关键字

比如想查找文件中包含“u32_t”或者“u16_t”的所有行,查找方式选择“正则表达式查找”,可以用notepad++输入“(u32_t)\s|(u16_t)\s”或者简单输入“u32_t|u16_t”查找即可,如下图所示。
对于想一次查找多个关键字的情况,只需在查找目标框中输入或关系多个关键字,点击查找即可,“|”号前后无空格。

正则表达式完成替换功能(NotePad++和SourceInsight)_第3张图片

在使用NotePad++ 正则表达式时参考了下面的文章:

  • NotePad++ 正则表达式替换 高级用法(博客);
  • Regular Expressions;
  • NotePad++ 正则表达式替换 高级用法(csdn);
  • 正则表达式 - 教程;

你可能感兴趣的:(Share)