我有一个脚本,该脚本使用正则表达式过滤语句搜索日志文件,并将匹配的行放入另一个文件中。正则表达式很简单,就像这样:
(en|es|fr|zh|ar|)/?(news|publications|about|key-issues|contact-us)
(还有更多匹配关键字,等等)。
我有一个很好的主意,哪组匹配关键字中最匹配。如果我将最可能匹配的关键字放在列表的首位(例如,“新闻”最可能匹配,然后是“出版物”等),是否会提高脚本的性能?还是顺序不重要?脚本进行解析时,它是否会尝试与第一个元素进行匹配,如果没有匹配,则进行第二行,依此类推,直到找到匹配项?如果我们知道每个关键字匹配的可能性,有没有办法使脚本更有效率?
答案 0 :(得分:1)
是的,正则表达式引擎会从左到右匹配OR,因此,如果英语最常见,则可以通过将en
设置为最左边的一个来优化搜索。最重要的是,尽管您事先编译了正则表达式,以便可以将其转换为状态机。编译后的性能差异可能可以忽略不计(除非您已经遇到性能问题-提防过早的优化)。
作为证明,使用https://regex101.com/,然后单击“ regex调试器”。当en
第一次使用时,需要22个步骤才能识别“ zh / publications”。但是,en
位于最后时,将需要27个步骤来识别相同的字符串。