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

标签 regex algorithm pattern-matching

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

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

最佳答案

这里有一些可能有用的东西,但是,它只会告诉你是否有 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 符号可能会有所不同,具体取决于您的正则表达式系统。

关于regex - 使用正则表达式查找任意长度的连续 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8658903/

相关文章:

regex - 如何在多个subversion存储库中搜索文件内容?

java - 使用 Java 正则表达式只想匹配 & 而不是 & < 等

Java正则表达式问题

algorithm - Prolog程序,这个程序应该做什么?

algorithm - 矩阵乘法的并行和分布式算法

haskell - 模式同义词导致不详尽的模式匹配

javascript - JS : finding regexp literals in code

arrays - 当比较不花时间时排序

haskell - Haskell获取代数参数的类型

Scala,如何访问整个匹配项 : X match {case Y(z) as matched =>