您的位置:首页 > 其它

Visual Studio 使用正则表达式查找替换

2016-11-19 10:44 483 查看
这几天在写DirectSound录音时,发现按照文档和查阅的资料写出的代码,在创建录音缓存时总是报无效的参数这个错误。我在想是不是因为音频格式未设置正确造成的,于是决定运行directx9的例子来看看究竟是什么情况。

但编译时却发现,在win10下的dx9例子中有很多符号都未定义,例如DXTRACE_ERR_MSGBOX,而我又懒得修正这个错误,于是决定先注释掉它,反正我只想看看运行到创建录音缓存的那部分代码是如何运行的。结果一编译,发现这样的地方有好几十处,我想一个个去注释太麻烦了,就决定用正则表达式搜索替换。由于之前没怎么接触这个,最后捣鼓了好久终于弄清楚了,记下来以备后查。

先引用一个关于VS正则表达式的博客文章(博主zelin):

正则表达式(Visual Studio)

当然,英文好的直接看MSDN即可,完全没有基础的,可以先看看这些资料了解一下。

我的任务是将所有

return DXTRACE_XXX( TEXT("XXX"), hr );


的代码注释掉,替换为

// return DXTRACE_XXX( TEXT("XXX"), hr );
return hr;


大家可以看到,我要替换的字符串还是有格式的,以 “return DXTRAE” 开头,以 “;” (分号)结尾,中间的字符串是变化的,也就是这是一个有着固定头尾的字符串,我先把正则表达式写出来,然后分析。

查找内容:

{(return DXTRACE)(.)*(;)}


替换为:

\/\/\1\nreturn hr;


先说查找内容,其中,用到了 小括号() ,大括号{} ,点号.,星号*

小括号,用于将表达式分块,例子中,我分了3块:

1,return DXTRACE

2,.

3,;

其中第一块和第三块,即待搜索的字符串中固定的部分,而第二块是点,按MSDN文档说明,这个点匹配除分行符(line break)外的任意字符,点后面的符号星号(*),则匹配前一个表达式块零次或多次,也就是匹配前面的第2块表达式零次或多次,所以说,我需要分块,如果不分的话,就会匹配星号前面所有的字符串。

最后一个表达式块,由于不在星号匹配范围内,而且又是最后一个块,那么小括号可以省略。

大括号的用处是标记符,主要用于在替换时使用,按照我写的例子,我将匹配出来的字符串做个标记,然后在替换时以 \1 的方式引用。

不清楚的话我再举个例子:

{a}{b}{c}


这个例子,将匹配例如 abcxyz 的字符串,那么我在替换时,可以用 \1 引用 a,\2 引用 b,\3 引用 c ,依此类推。

这有什么用呢?假设你想替换的字符串中,有需要保留的部分,那么这个就很有用了。

最后,替换部分的例子,想必大家自己应该可以看明白了,唯一要提的就是,一些特殊符号需要用到转义符: \

好了,关于VS的正则表达式还有很多语法没有提到,不过我想大家应该可以自己慢慢摸索了,这个用好了,那么再在VS中查找替换,就方便多了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: