java正則表示式中的分組
阿新 • • 發佈:2019-01-12
之前瞭解的regex中的()
只是方便和?+ * |
這類的符號的匹配以達到劃分範圍的目的。
比如說這個:"([+]|-)"
這個表示式匹配的是+
或-
,而不是[+
後跟著]
或-
如果是第二種意思得這麼寫"(\[+(])|-)"
這個例子很容易的就說明了[]中的意思和沒有括號是不同的,以及括號的意思是用來劃分範圍,即分組
今天瞭解到這個括號還有一個其他的用途就是捕獲。捕獲就是為了解決"越來越牛逼"這種 ABAC型問題。
Pattern pattern= Pattern.compile("(\\w).+\\1.+");
寫法很簡單\w的意思是[a-zA-Z0-9]
()代表了分組這裡的\w第一個出現所以放在了第一組中
.+的意思匹配多個非/n的字元
\\1的意思是重複出現匹配第一組匹配成功後的資訊
看懂了這些也就自然能理解為什麼能匹配越來越牛逼了
分組有時候也會因相互巢狀而變得複雜起來,比如我想要表示信用卡的餘額:
金額是有正有負的整數或小數,金額為正可以省略正號,甚至只寫小數點後面兩位也可以識別,於是就有了下面的正則表示式
"(([+]|-)?\\d+(.\\d{1,2})?)|(.\\d{1,2})"
“+12”;//成功
“-123”;//成功
“12.3”;//成功
" .12";//成功
“.”;//失敗
“123.”;//失敗
.123";//失敗
“+.12”//失敗
這個式子中的括號就看著比剛才的難多了,因為這時候出現了巢狀,那麼這時候該怎麼分組呢?
其實很簡單
分別對1234號括號的內容進行捕獲儲存到了1234四個組中,不過這有引出了一個新的問題,有時候我只想用括號分個組並不需要捕獲啊,這時候就引出了一個新的元字元(?: ··· )
()
就代表著只分組不捕獲的意思了。注意不要跟?
搞混了