基于Perl的正则表达式
书上是这样写的:
注意EXACT型量词重复的父节点为吸收节点、而且两者存在交集的情况,尽量避免,即使存在,注意EXACT型量词 > 15 时,会导致匹配效率下降;如果 > 100 时(在实际测试中,发现 >45 时就有可能漏报),不但匹配耗时很长,还很有可能漏报。编写PCRE时要特别注意这种情况。例如:
(?is) PROPFIND /\x40{268}\x25.*\x4f{500}
-> PCRE命中Fail
(?is) PROPFIND /\x40{268}\x25.*\x4f{47}
-> PCRE命中Fail
这里经过测试,发现这里PCRE如果修改为 .*\x4f{46} 时或重复次数<46时, PCRE命中OK
为了避免该问题,可以修改PCRE如下:
(?is) PROPFIND /\x40{268}\x25.*[^\x4f]\x4f{500}
-> PCRE命中OK
跪求懂的人指导。。。稍微帮我分析下最后这个
(?is) PROPFIND /\x40{268}\x25.*[^\x4f]\x4f{500}
-> PCRE命中OK
为什么命中OK,
另:锚定符^放在[]中间有什么效果呢?