1. 程式人生 > >Groovy筆記(5)_正則表示式

Groovy筆記(5)_正則表示式

正則表示式

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