我想知道自动生成小但非常重的内容以匹配某个正则表达式的方法。我的意思是,对于某种表达,我寻找最小和最重的有效载荷。
正式说heavy
值是
H = regexp engine work time / content length
鉴于存在最大内容长度
regexp ([\w%]+=[\w%]*&){500}
的示例:
检查内容匹配需要大约2500个步骤
A=& ... (498 times) ... A=&
并且检查内容不匹配需要大约250倍的步骤
A=& ... (498 times) ... A=
我的观察是:
/^\w+.../
是regexp引擎最差的构建此类有效载荷的线索是什么?
是否可以自动生成此类有效负载?
答案 0 :(得分:1)
and it takes ~250 times more steps to check that content doesn't match
然而,这些步骤并未真实地表明性能。
不确定有效负载的含义。但测试
总是一个好主意
你的正则表达式在失败模式下(即让它失败)。
问题是你的正则表达式包含一个固定范围,最小(500)量词。
这启动了回溯机制,即使你的表达没有 包含嵌套量词。
由于您标记了PCRE,因此最好使用其中一个回溯控制动词
由{500}
量化的表达式中的某个位置
这将解除 组的回溯机制
在(*SKIP)
匹配的字符串中,
引擎被禁止回去。
你可以获得这个应用程序RegexFormat的窗口
运行一些测试/基准测试场景。我有一个内置的基准测试工具。
匹配时间:
Regex1: ([\w%]+=(?:[\w%]*&|(*SKIP)(*FAIL))){500}
Completed iterations: 1 / 1 ( x 1000 )
Matches found per iteration: 1
Elapsed Time: 0.26 s, 256.59 ms, 256588 µs
失败的时间:
Regex1: ([\w%]+=(?:[\w%]*&|(*SKIP)(*FAIL))){500}
Completed iterations: 1 / 1 ( x 1000 )
Matches found per iteration: 0
Elapsed Time: 0.27 s, 270.76 ms, 270765 µs