以\\開頭的數字的正則表達式

目的:將字符串中不是以\開頭的數字以*代替。

如:對於字符串:abc11,cd123 \\0123,68,T5699

處理後的結果應該是:abc*,cd* \0123,*,T*

開始想到的表達式是(?<![\\\\d])([0-9]+){1,}

http://gskinner.com/RegExr/ 上驗證的結果是abc*,cd1* \\0*,*,T*

這就奇怪了,爲什麼\\0123中的123被匹配了?

根據RegExr的實時提示,\\\\d所表示的轉義之後的\ \ d,被解釋爲兩個\和一個d,意思是只要是\和字母d就可以。

所以應該把他換爲\\\d,也就是說,\d中的\是不需要用\\來表示,\d本身就是一個轉義。


還有一種解決方式是創建一個abc, cd這樣形式的一個分組(小括號擴起來的表達式:(regx)),然後再String的replaceAll的replacementString中引用這個分組的匹配結果,使得這個分組保持不變:

String s5 = "abc11,cd123 \\0123,68,T5699";
		String s6 = s5.replaceAll("([^\\\\\\d])\\d+", "$1*");

$1表示第一個分組([^\\\\\\d])的匹配結果:abc,cd和T

$符號在正則表達式中有兩種含義:

1.在String/Pattern的replace方法的replacement中表示對正則表達式組的引用,如上面的用法

2.匹配字符串的結束位置(是位置,不是字符,不表示字符串的結束字符)。(字符串的開始位置用^表示。單詞的開始和結束都是用\b表示)

參考文章:http://www.cnblogs.com/deerchao/archive/2006/08/24/zhengzhe30fengzhongjiaocheng.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章