我正在编写一个程序,必须删除相当多的垃圾。我使用正则表达式,并且因为我的程序在速度方面相当敏感,我需要知道哪个解决方案更快:使用多个连续的相对简单的正则表达式,或使用单个但非常复杂的表达式?
祝你好运, 提莫菲。
答案 0 :(得分:4)
您需要对这些内容进行基准测试,并确保对结果进行博客。我怀疑一个大的正则表达式会比许多小正则表达式更快,但我很想知道你发现了什么。
java.util.regex.Pattern
类非常复杂,我不会假装知道它执行了哪些优化。我知道正则表达式编译成图形,所以显而易见的是组合重叠路径。你填充到单个表达式中的变化越多,出现的机会就越多。它还可以减少输入数据的传递次数。
答案 1 :(得分:3)
正如你们许多人建议的那样,我试过了,结果如下:
在将我使用的一些RegExps加入其中之后,我的执行时间几乎加倍(从处理1000个字符串的10秒到1000个相同字符串的18秒)。
所以,基本上,事实证明,顺序删除尽可能多的符号,以便使剩下的字符串尽可能短,以便下一个正则表达式清理,这比长正则表达式更快。</ p>
PS。不幸的是,我无法自己发布正则表达式,因为它们被代码突出显示器损坏了。
PPS:以下是我依次使用的一些正则表达式:
s = s.replaceAll("<span STYLE=\"color:[\w|\d|\(|\)|\,]++\">", "");
s = s.replaceAll("</{0,1}\w++>", "");
s = s.replaceAll("<img SRC=\"/gif/", "");
s = s.replaceAll("(width|height)\s{0,}=\s{0,}\"{0,1}\d{1,}\"{0,1}", "");
s = s.replaceAll("align=\"\w++\"", "");
然后我把它们放在一起放在括号中并放置|他们之间。