Groovy筆記(5)_正則表示式
阿新 • • 發佈:2019-01-27
正則表示式
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