字符串匹配一直是程序设计的一个热门领域,但有时候我们需要的不是精准的完全匹配,而是模糊匹配,如找出一个字符串中说有符合“xx : xx”格式的表示时间的字符串,显然不能直接使用equals等方法进行查找而应该使用正则表达式。
正则表达式,又称规则表达式,通常被用来检索、替换那些符合某个模式(规则)的文本。例如下面这个正则表达式:
[0-9]{2}
就可以与所有的二位数匹配。接下来简单的介绍一些正则表达式的使用方法。一般而言,在JAVA中,频繁使用到正则表达式的有spilt和matches方法,前者用于分割字符串,后者用于判断匹配是否成功。它们可以使用以下形式的正则表达式:
1.无特殊符号的正则表达式
即正常的字符串,与字符串匹配的模式一致,即会与说有包含表达式的字符串匹配,如下面这个例子:
正则表达式:hello
可以匹配:helloworld,hellofriend,hellofather
除了无符号的正则表达式外,其他的正则表达式只能匹配固定长度的字符串。
2.含有通配符——“.”
即在表达式中使用”.”来表示任意符号,包括空格、Tab字符甚至换行符如下面这个例子:
正则表达式:hel.o
可以匹配:hello,helao,helio
3.含有方括号符号
如果想要限定可以替换的字符,就可以使用方括号,在方括号中限定可以替换的字符,如下面这个例子
正则表达式:hel[012]o
可以匹配:hel0o,hel1o,hel2o
其中可以用0-9表示所有数字,a-z表示所有小写字母,A-Z表示所有大写字母
4.含有或符号和圆括号
如果需要替换的字符长度不一致,可以使用或符号和圆括号,如下面这个例子:
正则表达式:h(e|ee|eee)llo
可以匹配:hello,heello,heeello
5.含有大括号
如果想要具体的表示字符的个数,可以使用大括号,如下面这个例子:
正则表达式:h[0-9]{2}llo
可以匹配:h00llo,h11llo,h12llo
同时还有可以用以下方式确定个数:
符号 | 个数 |
* | 任意次(包括0次) |
+ | 至少一次 |
? | 一次或零次 |
{a,b} | a次到b次 |
6.否符号^
如果只是想要匹配某个不以某字符开头的字符串,可以使用^符号,如下面这个例子:
正则表达式:h[^e]llo
可以匹配:hallo,hillo,htllo
有了上面这些基础,就可以写出一些简单的正则表达式,如下面这个例子:
正则表达式:[0-9]{11}
可以匹配:13549874589,15849872561,12236985847
既可以与所有的手机号码匹配。
因此,合理的利用正则表达式,就可以完成许多复杂的匹配问题。