基于正则表达式的替换效率



以下哪项更有效,更好用?

value.replaceAll("['‘’`]","")
value.replaceAll("['‘’`]+","")

我的猜测是,对于没有替换字符的字符串,或者至少没有它们的序列,两者是相同的,或者第一个更好,不那么复杂。

但是,如果我正在查看确实具有被替换字符的子序列的字符串怎么办?第二个会更好吗?

'abababababababab'.replaceAll("ab","") 

VS

'abababababababab'.replaceAll("(ab)+","") 

如果为了这个Q而重要,我正在使用Java。

根据分析,我会说第一个选项比第二个选项更快。尽管我必须说,除非您有一个巨大的字符串作为输入(或复杂的正则表达式),否则这种差异不容易测量。

因此,让我们称之为regex1:

'abababababababab'.replaceAll("ab","")

而这个正则表达式2:

'abababababababab'.replaceAll("(ab)+","")

我们从Java API中知道,replaceAll将把条件视为正则表达式,并尝试替换正则表达式引擎之后的字符串。

我们可以看到 regex1 只有 char 序列;而 regex2 有一个组、一个 char 序列和一个量词元字符,必须相应地解释(更多信息在这里)。因此,正则表达式 2 需要比正则表达式 1 更多的处理。

一般来说,对于大多数用途来说,这两个选项都非常快。您可以通过阅读本文对该过程有更详细的了解: 正则表达式匹配可以简单快速

尽管如此,使用模式和匹配器进行更复杂的正则表达式是一个更快的选择......(更多信息在这里)。

在此场景中,我建议的其他阅读材料是:在 Java 中优化正则表达式

相关内容

  • 没有找到相关文章

最新更新