正则表达式
1、正则表达式在Groovy中式本地语言级别的支持
2、def aRegex = ~'clat'
println aRegex.class //输出:class java.util.regex.Pattern
def mat ='clat'=~'clat'
println mat.class //class java.util.regex.Matcher
结论:~开头的字符串是模式Pattern对象
3、assert 'clat' =~'cl'
assert !('clat'=~'al')
def regex = ~'cl'
assert 'clat' =~regex
assert !('clat' ==~'cl') //精确匹配
正则表达式的元字符
- . 匹配任意单个字符
- ^ 匹配行的开始部分
- $ 匹配行的末尾部分
- * 匹配*前字符或正则表达式出现0或多次
- + 匹配+前字符或正则表达式出现1或多次
- ? 匹配?前字符或正则表达式出现0或1次
- [] 匹配[]中字符集中任一字符,如[a-z0-9]
- {} 限定次数,{3}固定3次,{1,4}最少1次,最多4次
- / 转义符 assert '$' ==~'//$' //需要重复反斜线符号
- | “或”选择符 assert 'ten' ==~'t(a|e|i)n'
- () 将封装的表达式组合起来 assert 'ababc' ==~'(ab)*c'
正则表达式的辅助符号
- /d [0-9] 数字
- /D [^0-9] 非数字
- /w [a-zA-Z0-9] Word字符
- /W [^a-zA-Z0-9]非Word字符
- /s [/t/n/f/r/v] 空白字符
- /S [^/t/n/f/r/v]非空白字符
正则表达式补充
1、在Java与Groovy中把 / 作为转义符会有冲突,所以一般适用 // 标示转义符
assert '1.2' ==~'//d//.//d'
assert '1 a' ==~'//d//s//w'
2、def datePattern = "([A-Z]{3})//s([0-9]{1,2}),//s([0-9]{4})"
def date = "NOV 28,2008"
def matcher = date =~datePattern
matcher.matches() //判断是否匹配
assert date =~datePattern //无断言错误
- println matcher[0] //['NOV 28,2008','NOV','28','2008']
- println matcher[0][0] // NOV 28,2008
- println matcher[0][1] //NOV
- println matcher[0][2] //28
- println matcher[0][3] //2008