正则表达式 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
相关文章
读者评论
发表评论 |