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

 在写程序时,如果一开始没有考虑到可移植性,把字符串都写成了:

"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

 

可能不是很好理解,但是他的排他性在我的实际情况中已经够用了,很可能的是,在其他的情况下他还是不够的,那就需要进一步的完善,所以,我的经验是,使用正则表达式,应该根据实际情况来进行,不可盲目自信,也不可轻易放弃,一切从实际出发...

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值