我编写了一个 Java 程序,它可以生成一系列符号,例如 "abcdbcdefbcdbcdefg"
。我需要的是 Regex 优化器,它可以生成 "a((bcd){2}ef){2}g"
。
由于输入可能包含 unicode,如 "a\u0063\u0063\bbd"
,我更喜欢 Java 版本。
我想要一个“更短”的表达式的原因是为了节省空间/内存。这里的符号序列可能很长。
一般来说,要找到“最短”的优化正则表达式很困难。所以,在这里,我不需要保证“最短”标准的那些。
最佳答案
我有一种讨厌的感觉,即创建与给定输入字符串或字符串集匹配的最短正则表达式的问题在计算上会“困难”。 (与计算 Kolmogorov Complexity 的问题有相似之处……)
还值得注意的是,就匹配速度而言,abcdbcdefbcdbcdefg
的最佳正则表达式很可能是 abcdbcdefbcdbcdefg
。添加重复组可能会使正则表达式字符串更短,但不会使正则表达式更快。事实上,除非正则表达式引擎展开重复组,否则它可能会更慢。
The reason that I need this is due to the space/memory limits.
您是否有明确的证据表明您需要这样做?
我怀疑这样做不会节省大量空间……除非输入字符串真的很长。 (如果它们很长,那么使用常规文本压缩算法来压缩字符串会获得更好的结果。)
关于java - 是否有任何用 Java 编写的正则表达式优化器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11927395/