Java:正则表达式模式匹配器有大小限制吗?

6

我的模式类似于逻辑或:“word1 | word2 | word3”

我大约有800个单词。

这会成为问题吗?


1
如果你只是想找出输入字符串是否与一组字符串中的一个匹配,那么可能有比巨大的正则表达式更好的方法。 - Oliver Charlesworth
4
这可能是一个正则表达式误用的很好例子。 - nothrow
3
可以,这可能是一个性能问题,因为一个单词是另一个单词的前缀。 - Kaj
你能描述一下你想做什么吗? - toto2
3个回答

6
你只受内存和理智的限制。 :)

@arshajii 猫粮的品牌是什么? - vipw
问题在于,一个800字的正则表达式,就像OP所描述的那样,表明了一个严重的设计缺陷。你的回答暗示一切都很好。 - arshajii
疯狂通常不被认为是正常的。 - vipw

4
你可以考虑使用Aho-Corasick字符串搜索算法,它比正则表达式更高效,因为它是线性的,并且针对你的问题进行了优化。这也是向1975年的同行致敬的一种方式!
特别是,有这个Java 实现

3

为什么会这样呢?不,可能不是。

我认为,具有800个单词的正则表达式表明某处存在设计问题。你为什么需要800个单词,目的是什么?


+1 对于设计问题。我建议提供更多细节来编辑这个问题的原始帖子。 - Liviu T.
我实际上正在统计语料库中一个包含800个单词的列表的出现次数。是否有比使用正则表达式更好的方法? - Johnny
是的,可以使用 HashMap<String, Integer>。将文本按非单词字符分割(如果我没记错的话,正则表达式为 \W),这将给你一个 String 数组。遍历该数组中的每个元素。如果哈希映射包含该单词,则将其值增加1;如果没有,则将该单词插入为键,并将1作为值放入哈希映射中。这应该更有效率,但这只是我的意见。 - Miki

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接