-2

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

例如:66688833777443344477774488555

但不是:262227723336339337775533777

请问有什么帮助吗?

4

2 回答 2

4

想一想这个。从本质上讲,您的问题意味着:匹配一个数字,其中每个数字立即重复至少一次。

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

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

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

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

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

^(([0-9])\2+)+$
于 2013-10-15T19:55:37.877 回答
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
于 2013-10-15T21:10:29.077 回答