3

是否可以使用正则表达式在字符串中匹配超过 1 个字符的任何重复子字符串的 3 次或更多次出现?

例如:

该字符串ABCD ABC AB ACD DE具有AB3 次或更多次子字符串。

字母 D 也出现了 3 次,但它只有一个字符,所以这是不匹配的。

我认为这超出了正则表达式的限制,但如果那里有一些天才,我会提出同样的问题。

我正在尝试做的是通过用一个字符替换重复的字符序列来减小加密查询字符串的大小,但是字符串需要附加(或前置)一个“图例”以指示已减少的内容。

例如:

该字符串ABCD ABC AB ACD DE将更改为类似的.CD .C . ACD DE内容,并且需要添加一些内容以便知道 . 现在代表 AB。

就像是.AB-

其中-充当终结者。所以替换小于 3 实际上会增加整个字符串的大小。

我使用的是 Classic ASP,但我对 C# 解决方案非常满意。然后我可以将其粘贴在 dll 中并以这种方式使用它。

4

1 回答 1

4

由于正则表达式在字符串中的贪婪和字符消耗,这里有很多限制。也就是说,您将只能匹配最能满足正则表达式贪婪的一个结果

(..+).*\1.*\1

上面捕获至少两个字符,如果相同的子字符串稍后存在两次,则将匹配。这适用于

ABCD ABC AB ACD DE
ABCD ABCD AB ABCD DE

但是在后一种情况下,只有“ABCD”得到匹配;AB没有。

除非这对您来说足够好,否则我建议使用正则表达式以外的解决方案,例如用空格分割单词并检查每个单词。它可能最终也会比正则表达式更有效。

于 2013-02-11T14:51:22.470 回答