Java正则表达式是否优化了这种特定情况?

mil*_*bii 5 java regex

我想知道正则表达式如何工作,我的特殊正则表达式有一个看起来像这样的元素:

(word1|word2|wordn......)

单词的数量是几百个.
我想知道正则表达式引擎是否只是逐个测试单词,或者它是否优化了搜索以及它的方式.
任何指向良好文档的指针都会很好.

Yon*_*oni 1

如果您有数百个单词,则需要注意正则表达式中单词的顺序。正则表达式引擎从左到右查找单词。如果您根据alternation
测试该单词,它将仅匹配组成“set”的3 个字母,而不是整个字符串。setValueset|setValue

请参阅此链接(来自 www.regular-expressions.info)以获取完整说明。

我不认为正则表达式引擎真正优化了交替(即分析常见前缀并相应地构建 nfa)。所以说了这么多,我觉得不会是一个优化。

除了重新排序单词之外,您还可以尝试在交替后添加单词或行边界,例如(set|setValue)$,但我怀疑正则表达式引擎会进行大量回溯,因此可能不值得付出努力。