Python正则表达式在某些文件上卡住了.

2024-04-24 22:50:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我为文本类文件(php、python、js源代码)创建了一个简单的扫描器,它获取regexp列表,并从某个目录递归地扫描所有文件/目录。你知道吗

它打开每个文件,读取内容(通常不是很大-我看到的最大值约为10Kb),并调用每个regexp方法re.sub(my_rx_N, my_replace_callback, file_content)。你知道吗

经过一些测试,我发现我的脚本被卡在了这些文件中的某个普通文件(即没有任何特定的问题/内容/编码)上,它的外观与其他文件不同。你知道吗

我不知道为什么会出现,也许你知道?你知道吗

示例regexp:

((#)([a-zA-Z0-9]*)\2.*)?(<\?php ?(?=(.*<\?php)))?(eval|echo)(\((base64_decode|gzinflate))+\(("|')[a-zA-Z0-9+=/]+\9\)+;( ?\?>(?=(.*<\?php)))?(.*\2/\3\2)?

<\?php(.*)\n(/\*[A-Za-z0-9 .]*\*/)\1?\nob_start\(\);(\1?\n)*\2\3\?>(\1?\n)*

preg_replace\("[]/a-zA-Z[0-9*.+]*/e[a-zA-Z0-9]*"[a-zA-Z0-9"_, (\'.)+;/=?<>]*

/\*([a-zA-Z0-9]+)\*/.+[ ]*[a-zA-Z0-9/\(\)-=;"{}\[\]\\!]+.+[ ]*/\*/\1\*/

(<\?php.?(?=(.*<\?php)))?if[ ]?\(([a-zA-Z0-9]+\()?(.?[$][A-Z_]*)(\["[0-9a-z_\\]*"\])\)[){(]*eval(\(base64_decode)?\(\4(\["[0-9a-z_\\]*"\])[{})(;A-Za-z0-9]*(.?\?>(?=(.*<\?php)))?

我使用的是python2.7。你知道吗


Tags: 文件文本目录内容myevalreplacephp