以\\开头的数字的正则表达式

目的:将字符串中不是以\开头的数字以*代替。

如:对于字符串:abc11,cd123 \\0123,68,T5699

处理后的结果应该是:abc*,cd* \0123,*,T*

开始想到的表达式是(?

在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

你可能感兴趣的:(java,正则表达式,string)