Java减少动态正则表达式模式以消除重复的限定符

时间:2015-02-18 17:10:12

标签: java regex string

是的我知道另一个正则表达式问题,MEH!嗯,这是一种正则表达式,但更多的模式识别驱动正则表达式生成...

无论如何,我正在研究脑筋急转弯,需要将一串字符的二进制表示转换为其他字符串表示。即0 = A|AA|AAA|AAAA+1 = A|AA|AAA|AAAA+|B|BB|BBB|BBBB+ 1010101010 == AAAAABBBBAAAA?给定一个相当大的输入文件。

我的解决方案是使用A+的模式0(A+|B+)的{​​{1}}动态创建正则表达式。

问题在于,当我迭代可能相当大的输入(二进制表示最多150个字符而AB表示法最多可达1000个字符)时,我最终得到了一个不能快速执行的大型正则表达式模式足以满足我的需求(需要能够在不到10秒的时间内对最多1000个字符的字符串执行匹配)

为了加快解决方案,我想减少生成的正则表达式的大小,以便输入1的二进制表示我想要正则表达式1010101010而不是我生成的{{1} }}

我的想法是我可以检测到重复模式并将其减少到只重复的第一个序列,然后从中生成正则表达式字符串。

有什么想法?

1 个答案:

答案 0 :(得分:0)

不是试图制作一个匹配整个文件的大图案,而是使用循环进行部分匹配,而matcher.find()则遍历A+B+的各个匹配。

Pattern pattern = Pattern.compile("A+B+");
Matcher matcher = pattern.matcher(input);
while (matcher.find())
{
    String part = matcher.group(); // this is the matched part
}