groovy tip 16 正規表示式 一
在groovy語言中,增加了正規表示式的匹配運算子「==~」。乙個簡單的例子如下:
println"friends"
==~ /friends/
列印結果為:
true
可以看到,在
groovy
語言中,正規表示式的匹配運算非常簡單。麻煩的是一些萬用字元需要記住,然後加以靈活運用。如下:
a?
表示乙個或零個a
a*
表示零個或n個
a(零個或以上)
a+ 表示n
個a(1
個或以上)
a 表示n
個a(如,a表示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
.
表示任意乙個字元
以上是比較常用的一些萬用字元,有了上面的一些基礎知識,才能做正則運算,下面試舉出一些例子。
比如,我們要匹配乙個數字,如:
defstr =
'1000.31'
首先我們要匹配小數點以前的整數字,數字的正規表示式為/[0-9]/,這表示乙個數字位,那麼多位數的整數的正規表示式為:/[0-9]+/,「+」表示乙個以上,見上面的說明。
接著要匹配小數點,值得注意的是「.」本身是乙個萬用字元,所以要用轉義符來表示,即/.表示小數點。再來匹配小數點後的數字,同樣是/[0-9]+/。
所以匹配小數點以及小數字就是//.[0-9]+/。
因為小數字可以有,也可以沒有,沒有則是乙個整數,所以小數字的正規表示式為/(/.[0-9]+)?/,「?」表示「(/.[0-9]+)」有零個或乙個。
所以數字的正規表示式為:
defre = /[0-
9]+(/.[0-
9]+)?/
我們來測試一下:
printlnstr ==~ re
結果為:true
同理,我們可以分析乙個郵箱的正規表示式:
defstr =
defre =
/[a-za-z][^@/.]+@[^@/.]+/.[^@/.]+/
printlnstr ==~ re
郵箱以字母開頭,所以re以
/[a-za-z]/開頭
;接著是非@非「
.」的任意字元,即
/[^@
/.]+
/;然後是
@;把上面的正則連線起來為:
/[a-za-z][^@
/.]+@ /。
然後是非
@的任意字元,即
/[^@
/.]+
/;接著是
.;最後又是非@非「
.」的任意字元。
所以將上面的分析連線起來,為
/[a-za-z][^@/.]+@[^@/.]+/.[^@/.]+/
現在,我們來匹配乙個手機號碼:
defstr =
'13640901345'
defre = /13[
0-9]/
printlnstr ==~ re 即以
13開頭,後面連續
9個數字。
defstr =
defre = /[a-za-z][^@/.]+@((sina.com)|(sohu.com))/
printlnstr ==~ re
結果為:
true
defstr =
defre = /[a-za-z][^@/.]+@((sina.com)|(sohu.com))/
printlnstr ==~ re
結果也為:
true
defstr =
defre = /[a-za-z][^@/.]+@((sina.com)|(sohu.com))/
printlnstr ==~ re
結果就是:
false
。
Groovy Tip 16 正規表示式 一
groovy tip 16 正規表示式 一 在groovy語言中,增加了正規表示式的匹配運算子 乙個簡單的例子如下 println friends friends 列印結果為 true 可以看到,在 groovy 語言中,正規表示式的匹配運算非常簡單。麻煩的是一些萬用字元需要記住,然後加以靈活運用。...
Groovy Tip 29 正規表示式 三
groovy tip 29 正規表示式 三 本篇主要來談談 捕獲組 和 非匹配組 以及與它們相關聯的一些概念。捕獲組 應該來說是乙個很重要的特性,特別是在進行文書處理的時候。比如,我們經常會遇到一些文字或數字跟一些符號混合在一起,而我們需要把這些文字或數字從這些符號中分離出來。這時候,我們就可以用到...
Groovy Tip 35 正規表示式 四
groovy tip 35 正規表示式 四 我們知道,在正規表示式中,有一些字串被用來的表達一些特殊的用途。比如,代表的是所有的字元 代表的是非 等等。看到這些用法的時候,我們就可以反過來問了,如果 代表的是所有的字元的話,那麼用什麼來匹配字串中的 呢?為了解決這樣的問題,在正規表示式中需要用 加上...