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

正则表达式常用符号


 代码/语法    说明
\转义字符 如:要使用 “\” 本身, 则应该使用“\”
|或运算符,匹配表达式左边和右边的字符串。如:ab
()影响表达式匹配的顺序,用作表达式的分组标记(类似C小括号影响运算顺序),如:([a-z]bc)smn\1匹配“tbcsmntbc”;
\tTab制表符 注:扩展和正则表达式都支持
\r回车符CR 注:扩展支持,正则表达式不支持
\n换行符LF 注:扩展支持,正则表达式不支持
  • 常用限定符
 代码/语法    说明
*重复零次或更多次,其左边的字符被匹配任意次(0次或多次)。如:be*匹配“b”,“be”或“bee”
+重复一次或更多次,其左边的字符被匹配至少一次(1次或多次)。如:be+匹配“be”或“bee”,但不匹配“b”
?重复零次或一次,其左边的字符被匹配0次或者1次。如:be?匹配“b”或“be”,但不匹配“bee”;\r?\n匹配行结尾符
{}指定前面的字符或分组的出现次数 如:abc{3}匹配abccc;a(bc){2}匹配abcbc
{n,}重复n次或更多次
{n,m}重复n到m次
  • 常用元字符
代码/语法说明
.匹配除换行符以外的任意字符
\w匹配字母或数字或下划线,匹配包括下划线的任意单个字符。等价于:[A-Za-z0-9_]
\s匹配任意单个空白字符:包括空格、制表符等(注:不包括换车符和换行符)。等价于:[ \t]
\d匹配数字,匹配一个数字字符。等价于:[0-9]
\b匹配单词的开始或结束,匹配单词起始处或结尾处 如:\bin匹配int,但不匹配sing
^匹配字符串的开始,其右边的表达式被匹配在行首。如:^A匹配以“A”开头的行
$匹配字符串的结束,其左边的表达式被匹配在行尾。如:e$匹配以“e”结尾的行
  • 常用反义词
代码/语法说明
\W匹配任意不是字母,数字,下划线,汉字的字符,\w取反的任意单个字符。等价于:[^A-Za-z0-9_]
\S匹配任意不是空白符的字符,\s取反的任意单个字符。
\D匹配任意非数字的字符,\d取反,匹配一个非数字字符。等价于:[^0-9]
\B匹配不是单词开头或结束的位置
[]匹配列表中任意单个字符。如:[ab]匹配“a”或“b”;[0-9]匹配任意单个数字
[^]匹配列表之外的任意单个字符。如:[^ab]匹配“a”和“b”以外的单个字符;[^0-9]匹配任意单个非数字字符
[^x]匹配除了x以外的任意字符
[^aeiou]匹配除了aeiou这几个字母以外的任意字符

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++正则表达式字符串最长不能超过69个字符

示例1

原始替换后
123abcfg
abc
abcd
123hello
hello
hello
方法 – 查找串:abc.$ 替换串:hello*

示例2

原始替换后
123abcfg
abc
abcd
123@abcfg@
@abc@
@abcd@
方法 – 查找串:(abc.)$ 替换串:@\1@*

示例3

原始替换后
str[1]abc[991]
str[2]abc[992]
str[11]abc[993]
str[222]abc[996]
god[991]
god[992]
god[993]
god[996]

方法1 – 查找串:str[[0-9]+]abc[([0-9]+)] 替换串:god[\1]
方法2 – 查找串:str[([0-9]+)]abc[([0-9]+)] 替换串:god[\2]

示例4 删除所有空行

step1:a. 选择正则表达式 b. 查找串:1*$ 替换串:空
step2:a. 选择扩展(\n,\r,\t,\0,\x…) b. 查找串:\r\n\r\n 替换串:\r\n 注:多次点击替换,直到没有可替换的字串

参考文章:


  1. \t ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值