生物信息中有时候会遇到JAVA写的程序,今天阅读源码的时候发现对于正则中的转义符不好理解,后来查资料后终于弄明白了,这里详细说明一下:
字符串的表示有三种方法:1、直接单字符,例如“A”;2、由转义字符表示的特殊字符,例如“ ”; 3、Unicode字符,例如“u0008”。其中转义字符表示的字符串,显示出来的就是这种模式,例如“ ”与“ ”是同一个字符串,“abc efg”与"abc efg"是同一个字符串。
但是单独的“”是不能出现在JAVA的字符串中作为字符串的,比如说如果要打印“abcefg”,这时会报错:“错误:非法转义符”。这是因为系统把“e“当做转义符,但是实际上并没有这个转义符。如果真的要将“”作为一个符号打印输出,那么就应该在""前面再加一个“”以表示后面的“”是要被输出,例如打印输出“abc\efg”,这时终端就会显示“abcefg”。
同样的在正则表达式中,“u0041\\” 将匹配"A"。 乍一看有点晕,怎么有这么多反斜杠。前面已经讲过了,这时因为在JAVA中‘’单独出现会报错,所以此处的四个“\\”可以看成两个,而这两个“\”又可以看成是对一个“”的转义了(在正则表达式中)。例子如下: 打印输出“abc\efg”时会报错“错误:非法转义符”;打印输出“abc\\efg”时显示“abc\efg”;打印输出"abc\\efg"时同样的报错,而打印输出"abc\\\efg”则显示“abc\efg”。
总结一下,也就是说,如果在字符串中如果出现了多个“”连在一起,那么两个两个一起看。如果在正则表达式中出现了多个“”连在一起,那么要四个四个一起看,这四个一起是匹配一个“”字符,因为如果只有两个“”的话,那么实际上就是一个“”,它后面还要有例如‘t’,'d'这样的字符跟着才能表示转义,否则就会报错。