JAVA中,String的replaceAll中正则表达式的用法

  昨天,看到一系列的代码,都需要用到正则表达式。JS的还可以了,可是,JAVA的。。。

  r = typeCode.replaceAll("([\\S]{3})([\\S]{2})", "MPC$2").replaceAll("(MPC[34])(.)", "$1X");

  真的不知道呀,这到底是啥意思呢,最后的结果是怎么出来的?

  System.out.println("J4M11".replaceAll("([\\S]{3})([\\S]{2})", "MPC$2"));

  打印出的结果是:

  MPC11

  实在找不出是为什么。这里面的$很显然是和JS里面的不一样的,它到底是什么意思呢?

  然后,自己试的时候,
  String str = "012345678231206546123";
  System.out.println(str.replaceAll("(123)(45678)", "$1.jsp"));

  打印出的结果是:

  0123.jsp231206546123

  这个时候,才恍然大悟。

  原来,前面的"(123)(45678)"正则,是匹配字符串,"123"或者"45678"都能匹配得到,而$1,是说第一个分组的匹配结果,"$1.jsp"是说,第一个分组的匹配结果替换为,第一分组的匹配结果后加".jsp"的样式,放回字符串。因为对第二个分组的匹配结果呢,没有说明,所以,那就是去掉。相当于replace.("45678", "")的作用。

  天,总算懂一点点了。也了解了一点小括号( ) 为啥子作用是分组了。。。

  =_=!!!

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