


出现此问题的原因是,当Proxomitron处理URL style hashes的时候,其中的通配符将只匹配符合域名格式的字符。以楼主的例子来说,表达式“*ivy.pconline.com.cn/adpuba/*”中的第一个“*”在到达“http://”中的“/”就停止匹配了,其无法匹配到边界表达式指定的“<iframe”,因此造成整个匹配失败。
那为什么将表达式放在其他blockfile中,或者变形为*(ivy.pconline.com.cn/adpuba)/*或者*(ivy.pconline.com.cn/adpuba/)*时,能匹配成功呢?第一种情况,应该是因为blockfile中项目太少,根本就没有hash;第二种情况,则是变形后不再符合url style的要求,因此没有按url style进行hash或者根本就没有hash。两种情况下,“*”都没有必须匹配符合域名格式字符的限制,因此可以匹配到边界表达式指定的边界,所以最终匹配成功。
以上所说的hash的情况,可以通过http://local.ptron/.pinfo/lists/进行验证。
注:关于hash的详细说明,请参考软件自带帮助的“Creating blocklists”一节。
单条项目的情况下,应该是一样的。但是,当blockfile中的条目多到可以hash的情况下,也许会有变化。我不了解hash的具体逻辑,无法给你准确结论。但既然软件作者给出了“Keep in mind leading wildcards are always slower and should be avoided if possible (particularly in web filter bounds checks).”的建议,为什么不遵守呢?nikita_win wrote:将“*”写到表达式里,Ad List中不以通配符开始,的确可以。但是真的能提高效率么?*$LST(adjs)*比对过程应该和在Ad List中所有规则前后添加通配符一样的吧?