正则表达式的缩短方式

时间:2015-06-02 09:39:30

标签: php regex pcre

这必须只匹配这些数字: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$/

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

答案 1 :(得分:1)

这是一个应该有效的更短的正则表达式:

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

它使用对第一个匹配字符的后引用来匹配第二个字符。这可确保112233等模式。

以下是regex101表达式中使用的字符的说明:

  
      
  • ^在行的开头断言位置
  •   
  • 第一个捕获小组([1-9])   
        
    • [1-9]匹配1到9
    • 范围内的单个字符   
  •   
  • \1匹配与第一个捕获组
  • 最近匹配的文本相同的文本   
  • [0]匹配字符0字面
  •   
  • $在行尾声明位置
  •   

你可以在这里测试一下: https://regex101.com/r/oV6rE7/1

相关问题