以下哪项会更有效、更好用?
value.replaceAll("['‘’`]","")
value.replaceAll("['‘’`]+","")
我的猜测是,对于没有替换字符的字符串,或者至少没有它们的序列,这两个是相同的,或者第一个最好不那么复杂。
但是,如果我正在查看确实具有被替换字符的子序列的字符串怎么办? 第二个会更好吗?
'abababababababab'.replaceAll("ab","")
对比
'abababababababab'.replaceAll("(ab)+","")
如果这对这个问题很重要,我会使用 Java。
最佳答案
根据分析,我会说第一个选项比第二个选项更快。尽管我必须说这种差异不容易衡量,除非您有一个巨大的字符串作为输入(或复杂的正则表达式)。
所以让我们调用这个 regex1:
'abababababababab'.replaceAll("ab","")
还有这个正则表达式 2:
'abababababababab'.replaceAll("(ab)+","")
我们从Java API知道replaceAll 将看到 both the conditions as a regex并尝试替换正则表达式引擎之后的字符串。
我们可以看到regex1只有char序列;而 regex2 有一个 group , 一个字符序列和一个 quantifier metacharacters必须相应地解释(更多信息 here )。因此 regex2 比 regex1 需要更多的处理。
一般来说,这两个选项对于大多数用途来说都非常快。您可以通过阅读本文更详细地了解该过程:Regular Expression Matching Can Be Simple And Fast
仍然,使用 Pattern和 Matcher对于更复杂的正则表达式是一个更快的选择...(更多信息 here)。
在这种情况下,我推荐的另外一本书是:Optimizing Regular Expressions in Java
关于java - 基于正则表达式的替换效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11309681/