我写了一个Java程序,它可以生成一系列符号,例如"abcdbcdefbcdbcdefg"。我需要的是Regex优化器,它可以生成"a((bcd){2}ef){2}g"

由于输入可能包含Unicode,例如"a\u0063\u0063\bbd",因此我更喜欢Java版本。

我想得到一个“较短”的表达式的原因是为了节省空间/内存。这里的符号序列可能很长。

通常,要找到“最短的”优化正则表达式很困难。因此,在这里,我不需要那些能保证“最短”标准的产品。

最佳答案

我有种讨厌的感觉,即创建与给定输入字符串或一组字符串匹配的最短正则表达式的问题在计算上将是“困难的”。 (与计算Kolmogorov复杂度的问题相似……)

还值得注意的是,就匹配速度而言,abcdbcdefbcdbcdefg的最佳正则表达式可能是abcdbcdefbcdbcdefg。添加重复组可能会使正则表达式字符串变短,但不会使正则表达式变快。实际上,除非正则表达式引擎展开重复的组,否则它可能会变慢。


  我之所以需要这样做,是由于空间/内存限制。


您是否有明确的证据表明需要这样做?

我怀疑这样做不会节省大量的空间...除非输入字符串真的很长。 (如果它们很长,那么使用常规的文本压缩算法来压缩字符串将获得更好的结果。)

关于java - 是否有任何用Java编写的Regex优化器?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11927395/

10-11 02:35
查看更多