Perl无/s修饰符实现跨换行任意匹配的高速正则方案
禁用/s修饰符的高速全文本正则匹配实现
需求背景
- 需要编写匹配任意文本内容的正则,实现过程不得使用/s修饰符
- 该正则为更大规模正则表达式的组成部分,无法通过全局启用/s修饰符的方式实现跨换行匹配
- 核心诉求为尽可能提升匹配处理速度,性能需接近带/s修饰符的原生实现水平
前期低性能方案测试结果
- 正则
s/(?:.|\n)+//:处理速度30 MBytes/s - 正则
s/[^\777]+//:处理速度124 MBytes/s - 基准对照(允许/s修饰符的实现):
s/.+//s,处理速度164 MBytes/s
上述两种无/s实现的性能均低于基准水平,无法满足速度要求
经测试达标的实现选项
经过多轮补测,以下三类无/s修饰符的实现性能已非常接近基准水平,属于可用的优质选项:
- 正则
s/(?s).+(?-s)//:处理速度162 MBytes/s - 正则
s/[\d\D]+//:处理速度162 MBytes/s - 正则
s/[\s\S]+//:处理速度161 MBytes/s
以上三类方案的处理速度与带/s修饰符的基准实现差距极小,完全符合高速匹配的性能要求。
内容的提问来源于stack exchange,提问作者Ole Tange
相关产品推荐
相关产品推荐

