加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Groovy Tip 16 正则表达式 一

发布时间:2020-12-14 16:59:30 所属栏目:大数据 来源:网络整理
导读:?????????????????????????????? Groovy Tip 16 正则表达式 一 ? ? 在Groovy语言中,增加了正则表达式的匹配运算符“==~”。一个简单的例子如下: ??? ? ??? ? println "friends" ==~ /friends/ ? ? 打印结果为: true 可以看到,在 Groovy 语言中,正则表达
?????????????????????????????? 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@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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读