使用正则表达式查找任意长度的连续块

时间:2011-12-28 17:01:55

标签: regex algorithm pattern-matching

我有一个包含1和0的字符串。我想确定是否有至少连续3次重复的1个或多个字符的子串。例如,字符串'000'的长度为1个子字符串,由一个重复3次的零字符组成。字符串'010010010011'实际上有3个这样的子串,每个子串重复3次('010','001'和'100')。

是否有正则表达式可以在不知道特定模式或模式长度的情况下找到这些重复模式?我不关心模式是什么,也不关心它的长度是什么,只是字符串包含3-peat模式。

3 个答案:

答案 0 :(得分:3)

这可能有用,但是,它只会告诉你是否有 a 模式重复三次,并且(我不认为)无法扩展告诉你是否有是其他人:

     /(.+).*?\1.*?\1/

打破这一点:

   (.+)          matches any 1 or more characters, starting anywhere in the string
   .*?           allows any length of interposing other characters (0 or more)
   \1            matches whatever was captured by the (...+) parentheses
   .*?           0 or more of anything
   \1            the original pattern, again

如果您希望重复紧邻,则使用

     /(.+)\1\1/

...正如@Buh Buh所建议的那样 - \1$1符号可能会有所不同,具体取决于您的正则表达式系统。

答案 1 :(得分:2)

(.+)\1\1

根据您的语言选择,\可能是不同的字符。这意味着匹配任何字符串然后尝试再次匹配它两次。

\1表示重复第一场比赛。

答案 2 :(得分:0)

看起来很奇怪,但这可能是解决方案:

/000000000|100100100|010010010|001001001|110110110|011011011|101101101|111111111/

这包含三次所有可能的组合。所以你的正则表达式将匹配这些数字(即):

  1. 10010010011
  2. 00010010011
  3. 10110110110
  4. 但不是为了这些:

    1. 101010101010
    2. 001110111110
    3. 111000111000
    4. 序列出现在整个字符串中的位置并不重要。