在PowerShell中使用正则表达式过滤来提高处理速度

时间:2018-08-02 19:08:59

标签: regex performance

我有一个脚本,该脚本使用正则表达式过滤语句搜索日志文件,并将匹配的行放入另一个文件中。正则表达式很简单,就像这样:

(en|es|fr|zh|ar|)/?(news|publications|about|key-issues|contact-us)

(还有更多匹配关键字,等等)。

我有一个很好的主意,哪组匹配关键字中最匹配。如果我将最可能匹配的关键字放在列表的首位(例如,“新闻”最可能匹配,然后是“出版物”等),是否会提高脚本的性能?还是顺序不重要?脚本进行解析时,它是否会尝试与第一个元素进行匹配,如果没有匹配,则进行第二行,依此类推,直到找到匹配项?如果我们知道每个关键字匹配的可能性,有没有办法使脚本更有效率?

1 个答案:

答案 0 :(得分:1)

是的,正则表达式引擎会从左到右匹配OR,因此,如果英语最常见,则可以通过将en设置为最左边的一个来优化搜索。最重要的是,尽管您事先编译了正则表达式,以便可以将其转换为状态机。编译后的性能差异可能可以忽略不计(除非您已经遇到性能问题-提防过早的优化)。

作为证明,使用https://regex101.com/,然后单击“ regex调试器”。当en第一次使用时,需要22个步骤才能识别“ zh / publications”。但是,en位于最后时,将需要27个步骤来识别相同的字符串。