Groovy Tip 16 正则表达式 一

Groovy Tip 16 正则表达式 一
在Groovy语言中,增加了正则表达式的匹配运算符“==~”。一个简单的例子如下:
println"friends" ==~ /friends/
打印结果为:true
可以看到,在Groovy语言中,正则表达式的匹配运算非常简单。麻烦的是一些通配符需要记住,然后加以灵活运用。如下:
a? 表示一个或零个a
a* 表示零个或na(零个或以上)
a+ 表示na1个或以上)
a{n} 表示na(如,a{3}表示3a,即aaa
a|b 表示ab
[abcd] 表示abcd,相当于a|b|c|d
[a-z] 表示az之间的任意一个,同理[A-Z]AZ之间的任意一个
^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@sina.com'
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@sohu.com'
def re = /[a-zA-Z][^@\.]+@((sina.com)|(sohu.com))/
println str ==~ re
结果为:true
def str = 'fxxfg_001@sina.com'
def re = /[a-zA-Z][^@\.]+@((sina.com)|(sohu.com))/
println str ==~ re
结果也为:true
def str = 'fxxfg_001@163.com'
def re = /[a-zA-Z][^@\.]+@((sina.com)|(sohu.com))/
println str ==~ re
结果就是:false
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值