2.反向引用如:\1,\2等
\1:表示的是引用第一次匹配到的()括起來的部分
\2:表示的是引用第二次匹配到的()括起來的部分
(1)例:
String regex = "^(\\d)\\1$";
首先這裏是匹配兩位,\d一位,\1又引用\d一位 這裏的\1會去引用(\d)匹配到的內容,由於(\d)是第一次匹配到的內容。
如:str = "22"時,(\\d)匹配到2,因此\1引用(\\d)的值也爲2,因此str="22"能匹配
str = "23"時,(\\d)匹配到2,由於\1引用(\\d)的值2,而這裏是3,因此str="23"不能匹配
(2)例:
String regex = "^(\\d)\\1[0-9](\d)\1{2}";
注意在後面第二個(\d)\1{2}中的\1,這裏的\1並不會去匹配他前面的(\d),而是匹配第一個(\\d),
如:第一個(\d)爲3時,則第一個\1也爲3,一樣最後那個\1也爲3,因此結果能夠是335933,332533
而不是336444,339888
(3)例:
String regex = " ^(\d)\1[0-9](\d)\2{2}$";
這裏使用了\2引用第二次匹配到的分組,這裏第二次匹配的分組爲\2前面的(\d), 這裏的{2}指的是\2的值出現兩次
如:第一個(\d)爲4時,\1引用第1個(\d)也爲4,第二個(\d)爲5時,\2引用第二個(\d)爲5,因此結果能夠是:447555,440222
(4)例:
String regex = " ^((\d)3)\1[0-9](\d)\2{2}$";
當匹配中的分組有嵌套時,是從外向裏匹配的,其次在由左向右匹配
這裏主要是分析匹配到分組的順序,首先匹配((\d)3)這整個部分,其次匹配((\d)3)裏面的(\d),第三次匹配時最後一個\2前面的(\d)
如:如((\d)3)中的(\d)爲2時,((\d)3)的值爲23,此時\1爲((\d)3)的值1,而\2引用((\d)3)中的(\d)的值3,第三個(\d)爲5時,此時\3引用第三個(\d)的值5,因此結果能夠有:23238522,23230522,