2016-12-05 71 views
1

我正在使用Java中的RegEx對電話號碼進行分類,並且發現連續重複的號碼。與RegEx不匹配的重複號碼

這是爲什麼正則表達式

9{4}([0-8]\1{2})([0-9]\1{3})[0-9] 

不匹配該字符串

9999227771 
+2

因爲第一次回參考是指自己和不正確的中繼器計數。 ['9 {4}([0-8])\ 1 {1}([0-9])\ 2 {2} [0-9]'](https://www.regex101.com/r/ Rwvw3N/1) – Tushar

+1

你比我快@Tushar把你的答案寫成答案:) –

+1

'\ 1 {1}'是多餘的,只是'\ 1' .. – hwnd

回答

2

在正則表達式

9{4}([0-8]\1{2})([0-9]\1{3})[0-9] 

([0-8]\1{2})這是第一捕獲組和內部的\1 - back-reference指本身不起作用。

在第二個捕獲組([0-9]\1{3})中,您再次指的是第一個捕獲組。

此外,兩個反向引用都重複n次,應該是n-1,因爲第一個數與捕獲組相匹配。

這裏被修正的正則表達式

9{4}([0-8])\1([0-9])\2{2}[0-9] 

RegEx101 Demo

  1. 9{4}:重複9四次。即9999
  2. ([0-8])\1:匹配給定範圍中的數字並再次匹配相同的數字,因此\1
  3. ([0-9])\2{2}:匹配一個數字,並按照它通過同一個數字的兩倍

注意:要精確匹配的電話號碼,使用anchors ^ and $