正则表达式转义符的问题

​ 之前做leetcode遇到一道题,其中一个要求是把邮箱地址的local name中第一个+到@号的字符全部忽略掉(包括+号)

例如:[email protected]可处理为[email protected]

​ 之前正好看了正则表达式,感觉这个要求还是挺适合用正则的regex_replace函数来实现的。然后我就写了如下代码(错误代码)

1
2
3
4
5
regex pattern2("+.*@");
for (int i = 0; i < emails.size(); i++)
{
emails[i]=regex_replace(emails[i], pattern2, "@");//删除local name中加号后的内容
}

​ 由于+号是特殊字符,所以需要来进行转义,’.’表示任意字符,*表示匹配零次或多次之前的部分,最后加@。

编译的时候抛异常。

正确的写法如下:

1
2
3
4
5
regex pattern2("\+.*@");
for (int i = 0; i < emails.size(); i++)
{
emails[i]=regex_replace(emails[i], pattern2, "@");//删除local name中加号后的内容
}

​ 后来查询资料发现,’‘本身就是个特殊字符,也就是说,‘+’中的’‘也需要通过转义得到,否则编译器不认。也就是通过’\‘先转义出一个’‘,再由转义出的反斜杠去转义+。