Java的正则

Java的正则非常坑爹,因为转义的恶心程度已经令人发指了。


我先举个简单的例子,假如有个方法,参数是普通字符串,返回的是符合Java规范的正则字符串,众所周知,这需要转义,这里简单一下,仅转义 .

public String toRegex(String str) {

    return str.replaceAll("\\.", "\\.");

}


可以看到,第一个参数是 \\. ,一般的语言表示为 \. ,但是Java需要转两次,为什么呢?


比如JavaScript,会写成

var exp = /\./g;

exp不是字符串,而是一个正则对象,但是Java是用字符串表示正则的,也就是说,第一次转义是所有语言共有的,正则引擎级别的转义,第二次是Java语言级别 [字符串] 的转义。


Java的字符串,\ 后面跟着谁 表示要转义谁,如果要转义"\",需要写成 "\\"。


好了,现在我们知道正则引擎能够认识 \.  ,之后这个东东被当作字符串再转一次,也就是 \\.


第二个参数, 同理可得,不再赘述



你可能感兴趣的:(java)