vs中在尋找替換中使用Regex

來源:互聯網
上載者:User

 在寫程式時,如果一開始沒有考慮到可移植性,把字串都寫成了:

"hello,world!"

到了後面,想把大量的這裡字串替換成:

_T"hello,world!"

這該如何是好呢,作為一個合格的程式員,請不要一個個的改,不然會被人鄙視的...

而在vs中,提供了簡單解決這玩意的方法,事實上也不簡單,我查了一個小時才學會的。

關鍵就是Regex,關於Regex,以下有一篇很好的Regex入門:

http://unibetter.com/deerchao/zhengzhe-biaodashi-jiaocheng-se.htm

 

注意:這個教程中的Regex和vs中有不少差別,主要是元字元等等。

瞭解了Regex後,開啟vs的尋找替換,點開尋找選項->使用,在combobox中選Regex,好了,這樣就可以使用Regex了。

 

在尋找框中輸入:{"[^"]*"}

在替換框中輸入:_T/1

 

我們的任務就結束了,如果你看了上面那篇文章,那麼說明一下,在vs中,{}代表分段,而不是()。

 

另外一個例子:

將使用wxWidgets的程式移植到mfc時,經常會遇到這樣的運算式:

  wx_static(void*, ptr);

其實就相當於(void*)ptr。

 

在尋找框中輸入: wx_static_cast{/(.*},{.*}/)

替換框中輸入: /1/)/2

 

其實,更清晰的方式應該是這樣的:

 

在尋找框中輸入: wx_static_cast/({.*},{.*}/)

替換框中輸入: /(/1/)/2

 

 

但是很奇怪的,vs無法替換成以/(開頭的標識。

 

顯然()需要用轉義輸入,而.*代表了任一字元串。

 

然而,上面的代碼在實踐中卻是不可行的!!!

看似正確的背後,隱藏著重重"胸肌"....

 

正確的做法應該是在寫完了Regex後,進行良好的測試,再進行運用,比如,上面的例子的一個比較可用的版本是:

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

替換框中輸入: /(/1/)/2

 

可能不是很好理解,但是他的排他性在我的實際情況中已經夠用了,很可能的是,在其他的情況下他還是不夠的,那就需要進一步的完善,所以,我的經驗是,使用Regex,應該根據實際情況來進行,不可盲目自信,也不可輕易放棄,一切從實際出發...

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.