基于Perl的正则表达式

sheila_1988 2012-10-18 07:25:51
书上是这样写的:
注意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,

另:锚定符^放在[]中间有什么效果呢?
...全文
180 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
proorck6 2012-10-25
  • 打赏
  • 举报
回复
字符集的补集
[^abc]表示非a、b、c的字符集。
sheila_1988 2012-10-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

是什么书?


另:锚定符^放在[]中间,表示排除型字符组,即其他字符都可匹配,但不匹配\x4f
[/Quote]


是公司的文档 = =

那(?is) PROPFIND /\x40{268}\x25.*\x4f{47}为什么要把\x4f{47}改掉。不像下面这样改呢。。
下面这个改了之后\x4f{500}后面的量词不是大于45,意思是不是还是会漏报,但是这个例子里不考虑这个问题?
zjs100901 2012-10-18
  • 打赏
  • 举报
回复



^[]\x4f

37,720

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧