【发布时间】:2019-04-19 06:25:14
【问题描述】:
我有
- 模式/替换对列表。
- 用于替换的长字符串(数 kByte 甚至 MBytes)。
所有模式的所有出现都必须由其相应的替换文本替换。每个模式在字符串中可能存在不止一次。
目前,我通过遍历模式/替换对列表并每次都使用 string.gsub 来做到这一点:
for _, pattern, replace in iter(replace_patterns) do
body = body:gsub(pattern, replace)
end
(iter 是一个辅助函数,可以更好地遍历模式。)
问题:这是最好的方法吗?我担心这会效率低下,因为每次调用 gsub 都会扫描整个长字符串。
附:我读过https://stackoverflow.com/a/12865406/5005936(帮助我减少字符串使用和其他)和https://stackoverflow.com/a/38422229/5005936(但我不想在这种情况下编写本机代码......)
【问题讨论】:
-
你看过LPeg吗?它速度很快,并且只允许您扫描一次字符串。