PHP:有没有一种方法可以加快使用大量正则表达式搜索大量文件的速度


PHP: Is there a way to speed up searching a large number of files using a large number of regexes?

我有一个正则表达式数组。如果正则表达式匹配,我有大量的文件要标记。现在我只是用每个正则表达式搜索每个文件。

我突然想到,可能有一种方法可以构建一个树,例如对文件进行一些快速预处理,以确定是否使用特定的正则表达式进行搜索。例如,所有包含字母A的正则表达式都在特定分支上,如果文件不包含字母A,则不应用这些正则表达式。

有人做过这方面的工作吗?我被迫使用纯PHP处理文件,并且我必须遍历目录树来逐个处理每个文件。我可以控制正则表达式的数据结构以及它们的使用方式,但我需要正则表达式的灵活性来进行最终的模式匹配。

如果您可以将reg exp转换为单词,则可以尝试aho-corasick算法,例如尝试通配符。使用通配符进行修饰非常简单。只需在通配符处拆分模式,然后将它们添加到自动机中。搜索时,可以使用状态和输入位置来计算最长的匹配前缀。