我想知道正则表达式如何工作,我的特殊正则表达式有一个看起来像这样的元素:
(word1|word2|wordn......)
单词的数量是几百个.
我想知道正则表达式引擎是否只是逐个测试单词,或者它是否优化了搜索以及它的方式.
任何指向良好文档的指针都会很好.
如果您有数百个单词,则需要注意正则表达式中单词的顺序。正则表达式引擎从左到右查找单词。如果您根据alternation
测试该单词,它将仅匹配组成“set”的3 个字母,而不是整个字符串。setValueset|setValue
请参阅此链接(来自 www.regular-expressions.info)以获取完整说明。
我不认为正则表达式引擎真正优化了交替(即分析常见前缀并相应地构建 nfa)。所以说了这么多,我觉得不会是一个优化。
除了重新排序单词之外,您还可以尝试在交替后添加单词或行边界,例如(set|setValue)$,但我怀疑正则表达式引擎会进行大量回溯,因此可能不值得付出努力。