java正則反向引用

sayWhat_sayHello發表於2018-07-20

backreference:反向引用.與捕獲組匹配的輸入字串結果儲存在記憶體中,以便以後通過反向引用進行呼叫。用\+數字,表示要引用的group(數字)。
普通捕獲組反向引用:\k,通常簡寫為\number
命名捕獲組反向引用:\k或者\k’name’
https://www.cnblogs.com/-ShiL/archive/2012/04/06/Star201204061009.html

源表示式:1212
正規表示式:((\d)\d)\1
匹配結果:1212
解析:首先((\d)\d),匹配了12,那麼記憶體儲存鍵為1,值為12的索引。然後\1,拿出來進行匹配,即1212.同理如果源表示式是1234,由於34和原本的不一致,所以不匹配。

源表示式:1212
正規表示式:((\d)\d)\2
匹配結果:121
解析:首先((\d)\d),匹配了12,那麼記憶體儲存鍵為2,值為1的索引。然後\2,拿出來進行匹配,即121.

上面說的鍵值的索引只是我個人的猜測,具體儲存方式我並不太清楚,但是一定會有相關的儲存而且應該是同時存了可能引用的索引。我猜測應該是陣列的可能性大點。

帶著上面的想法我又驗證了一下
源表示式:121121
正規表示式:((\d)\d)\2\1
匹配結果:12112
解析:首先((\d)\d),匹配了12,那麼記憶體儲存鍵為1,值為12的索引,儲存鍵為2,值為1的索引。然後\2,拿出來進行匹配,即121.再拿出\1進行匹配,即12112

源表示式:121121
正規表示式:((\d)\d)\2\2
匹配結果:1211
解析:首先((\d)\d),匹配了12,那麼記憶體儲存鍵為1,值為12的索引,儲存鍵為2,值為1的索引。然後\2,拿出來進行匹配,即121.再拿出\2進行匹配,即1211

相關文章