专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »Java教程 » 正则表达式 Groovy Tip 16 正则表达式 一 »正文

正则表达式 Groovy Tip 16 正则表达式 一

来源: 发布时间:星期五, 2008年5月23日 浏览:272次 评论:0
在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 = '[email protected]'

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 = '[email protected]'

def re = /[a-zA-Z][^@\.]+@((sina.com)|(sohu.com))/

println str ==~ re

结果为:true

def str = '[email protected]'

def re = /[a-zA-Z][^@\.]+@((sina.com)|(sohu.com))/

println str ==~ re

结果也为:true

def str = '[email protected]'

def re = /[a-zA-Z][^@\.]+@((sina.com)|(sohu.com))/

println str ==~ re

结果就是:false。

相关文章

读者评论

  • 共0条 分0页

发表评论

  • 昵称:
  • 内容: