2015-06-02 20 views
4

這隻能匹配這些數字:110, 220, 330, 440, 550, 660, 770, 880, 990(不與000)。這個正則表達式(pcre)有更簡單的方法嗎?更短的正則表達式的方法

/^(1{2}|2{2}|3{2}|4{2}|5{2}|6{2}|7{2}|8{2}|9{2})0$/ 

回答

3

您可以使用:正則表達式的

/\b([1-9])\g{1}0\b/ 

RegEx Demo

破碎:

\b  # word boundary 
[1-9] # match digit 1-9 and group them as captured group #1 
\g{1} # back-reference to group #1 
0  # match 0 
\b  # word boundary 
+0

1.這不符合110 2.您知道我對代碼的回答只回答 – Rizier123

+0

它符合110 – anubhava

+0

https:// regex1 01.com/r/mP6vR8/1不適合我 – Rizier123

1

這裏是一個更短的正則表達式應該工作:

/^([1-9])\1[0]$/ 

它使用對第一個匹配字符的反向引用來匹配第二個匹配字符。這確保了1122,33等模式。

下面是從regex101在表達式中使用的字符的解釋:在一行的開始

  • 第一捕獲組([1-9])
    • [1-9]匹配單個字符

      • ^斷言位置在1和9之間的範圍內
    • \1匹配如最近由第一捕獲組
    • [0]匹配相同的文本0字面上
    • $斷言位置的直線

    你可以在這裏測試的結束相匹配的字符: https://regex101.com/r/oV6rE7/1

  • +1

    第二捕獲組是無用的,刪除它。 –

    +1

    當然。現在刪除。我認爲它稍微提高了性能,儘管它使解決方案延長了一個字符,因爲您需要避免以下「0」,並且它不會提高可讀性。 – while

    +0

    你是對的,我沒有看到由於下面的'0'造成的模糊性。沒有捕獲組的幾個解決方法:https://regex101.com/r/hH5cZ5/1(版本1,2,3) –