Java的正则

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


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

public String toRegex(String str) {
    return str.replaceAll("\\.", "\\.");
}


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


比如JavaScript,会写成

var exp = /\./g;

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


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


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


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



posted @ 2012-04-22 23:41  越己  阅读(325)  评论(0编辑  收藏  举报