Groovy Tip 16 正则表达式 一
在Groovy语言中,增加了正则表达式的匹配运算符“==~”。一个简单的例子如下:
println
"friends"
==~ /friends/
打印结果为:
true
可以看到,在
Groovy
语言中,正则表达式的匹配运算非常简单。麻烦的是一些通配符需要记住,然后加以灵活运用。如下:
a?
表示一个或零个
a
a*
表示零个或
n
个
a
(零个或以上)
a+
表示
n
个
a
(
1
个或以上)
a{n}
表示
n
个
a
(如,
a{3}
表示
3
个
a
,即
aaa
)
a|b
表示
a
或
b
[abcd]
表示
a
或
b
或
c
或
d
,相当于
a|b|c|d
[a-z]
表示
a
到
z
之间的任意一个,同理
[A-Z]
是
A
到
Z
之间的任意一个
^a
表示非
a
()
表示一个正则表达式,如
(ab)
匹配
ab
.
表示任意一个字符
以上是比较常用的一些通配符,有了上面的一些基础知识,才能做正则运算,下面试举出一些例子。
比如,我们要匹配一个数字,如:
def
str =
'1000.31'
首先我们要匹配小数点以前的整数位,数字的正则表达式为/[0-9]/,这表示一个数字位,那么多位数的整数的正则表达式为:/[0-9]+/,“+”表示一个以上,见上面的说明。
接着要匹配小数点,值得注意的是“.”本身是一个通配符,所以要用转义符来表示,即/.表示小数点。再来匹配小数点后的数字,同样是/[0-9]+/。
所以匹配小数点以及小数位就是//.[0-9]+/。
因为小数位可以有,也可以没有,没有则是一个整数,所以小数位的正则表达式为/(/.[0-9]+)?/,“?”表示“(/.[0-9]+)”有零个或一个。
所以数字的正则表达式为:
def
re = /[
0
-
9
]+(/.[
0
-
9
]+)?/
我们来测试一下:
println
str ==~ re
结果为:true
同理,我们可以分析一个邮箱的正则表达式:
def
str =
'fxx12_ee@'
def
re =
/[a-zA-Z][^@/.]+@[^@/.]+/.[^@/.]+/
println
str ==~ re
邮箱以字母开头,所以
re
以
/
[a-zA-Z]
/
开头
;
接着是非
@
非“
.
”的任意字符,即
/
[^@
/.]+
/;
然后是
@
;把上面的正则连接起来为:
/
[a-zA-Z][^@
/.]+@
/
。
然后是非
@
的任意字符,即
/
[^@
/.]+
/;
接着是
.
;最后又是非
@
非“
.
”的任意字符。
所以将上面的分析连接起来,为
/[a-zA-Z][^@/.]+@[^@/.]+/.[^@/.]+/
现在,我们来匹配一个手机号码:
def
str =
'13640901345'
def
re = /
13
[
0
-
9
]{
9
}/
println
str ==~ re
即以
13
开头,后面连续
9
个数字。
现在,我们来匹配新浪或搜狐的邮箱:
def
str =
'fxxfg_001@'
def
re = /[a-zA-Z][^@/.]+@(()|())/
println
str ==~ re
结果为:
true
def
str =
'fxxfg_001@'
def
re = /[a-zA-Z][^@/.]+@(()|())/
println
str ==~ re
结果也为:
true
def
str =
'fxxfg_001@'
def
re = /[a-zA-Z][^@/.]+@(()|())/
println
str ==~ re
结果就是:
false
。