正则表达式 - 每个数字等于下一个或前一个

时间:2013-10-15 19:50:12

标签: regex

我需要一个正则表达式代码(对于egrep)来匹配数字等于前一个或下一个数字的行。

例如:66688833777443344477774488555

但不是:262227723336339337775533777

请帮忙吗?

2 个答案:

答案 0 :(得分:4)

暂时考虑一下。实质上,您的问题意味着:匹配一个数字,其中每个数字立即重复至少一次。

现在,如果您知道([0-9])\1+会匹配一组这样的数字(例如22777),那么您就在那里。

下一步是匹配这些组中的一个或多个。为此,您需要另一个+量词加上另一对parentheses,其中包含要重复的组:

(([0-9])\2+)+

请注意,反向引用更改为\2,因为([0-9])现在是第二个(内部)组。

最后,为了确保整行匹配,我们需要使用一些anchors

^(([0-9])\2+)+$

答案 1 :(得分:1)

使用环顾^(?:(\d)(?:(?=\1)|(?<=\1{2})))+$的解决方案:

^    # start of input
  (?:    # start not capturing group for repetition for each decimal
    (\d)    # any decimal captured in a group
    (?:
      (?=\1)     # positif look ahead for an ocurrence of the capture in the group
      |            # or
      (?<=\1{2}) # positif look behind for the matched decimal and the same decimal one position before
     )
  )+     # end of repetition group for each decimal
$     #end of input