我需要一个正则表达式代码(对于egrep)来匹配数字等于前一个或下一个数字的行。
例如:66688833777443344477774488555
但不是:262227723336339337775533777
请帮忙吗?
答案 0 :(得分:4)
暂时考虑一下。实质上,您的问题意味着:匹配一个数字,其中每个数字立即重复至少一次。
现在,如果您知道([0-9])\1+
会匹配一组这样的数字(例如22
或777
),那么您就在那里。
下一步是匹配这些组中的一个或多个。为此,您需要另一个+
量词加上另一对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