您的位置:首页 > 其它

vs中在查找替换中使用正则表达式

2009-11-04 17:10 651 查看
在写程序时,如果一开始没有考虑到可移植性,把字符串都写成了:

"hello,world!"
到了后面,想把大量的这里字符串替换成:

_T"hello,world!"
这该如何是好呢,作为一个合格的程序员,请不要一个个的改,不然会被人鄙视的...

而在vs中,提供了简单解决这玩意的方法,事实上也不简单,我查了一个小时才学会的。

关键就是正则表达式,关于正则表达式,以下有一篇很好的正则表达式入门:
http://unibetter.com/deerchao/zhengzhe-biaodashi-jiaocheng-se.htm
注意:这个教程中的正则表达式和vs中有不少差别,主要是元字符等等。

了解了正则表达式后,打开vs的查找替换,点开查找选项->使用,在combobox中选正则表达式,好了,这样就可以使用正则表达式了。

在查找框中输入:{"[^"]*"}

在替换框中输入:_T/1

我们的任务就结束了,如果你看了上面那篇文章,那么说明一下,在vs中,{}代表分段,而不是()。

另外一个例子:

将使用wxWidgets的程序移植到mfc时,经常会遇到这样的表达式:

wx_static(void*, ptr);

其实就相当于(void*)ptr。

在查找框中输入: wx_static_cast{/(.*},{.*}/)

替换框中输入: /1/)/2

其实,更清晰的方式应该是这样的:

在查找框中输入: wx_static_cast/({.*},{.*}/)

替换框中输入: /(/1/)/2

但是很奇怪的,vs无法替换成以/(开头的标识。

显然()需要用转义输入,而.*代表了任意字符串。

然而,上面的代码在实践中却是不可行的!!!

看似正确的背后,隐藏着重重"胸肌"....

正确的做法应该是在写完了正则表达式后,进行良好的测试,再进行运用,比如,上面的例子的一个比较可用的版本是:

在查找框中输入: wx_static_cast{/([^,()]*},{[^(),]*}/)

替换框中输入: /(/1/)/2

可能不是很好理解,但是他的排他性在我的实际情况中已经够用了,很可能的是,在其他的情况下他还是不够的,那就需要进一步的完善,所以,我的经验是,使用正则表达式,应该根据实际情况来进行,不可盲目自信,也不可轻易放弃,一切从实际出发...
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: