我发现我的 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,}!