我发现我的 go 项目中的正则表达式替换非常慢,使用 regexp.ReplaceAllLiteralString (re2) 将 \s+ 替换为单个空格。
它显然是为了折叠 SVG 中的空白而放置的,无论这是否是个好主意,当更改为“{2,}”时,操作是十分之一的时间。
虽然使用 \s 与 ' ' 是一个相当大的区别 - 但这是有道理的,它是比较的 5 倍。但是为什么当使用单个空格和 + 时,它比使用 {2,} 慢 9 倍?
X+
表示“出现一次或多次的 X 的每个实例”,这意味着它等价于{1,}
. 您正在替换(一个空白)以及
使用\s+
.
对于 SVG 文档或任何 XML 文档,使用\s+
肯定会很慢。以下文档需要 5 次替换,忽略换行符序列:
<?xml version="1.0" encoding="utf-8"?>
<element attr1="value" attr2="value" attr3="value"/>
现在想象一个复杂得多的 SVG 文档,这样的东西\s{2,}
比\s+
(aka \s{1,}
) 快得多是合理的!如果您使用\s{2,}
!