java中高效的字符串匹配

java中高效的字符串匹配,java,regex,string,string-matching,Java,Regex,String,String Matching,我有一系列的句子(推特)和超过1000万个名字。我想确定一句话(tweet)中是否提到了1000万个名字中的一个。我可以为所有可能的模式编译正则表达式,但我真的很想知道是否有一种有效的算法可以做到这一点 谢谢,您可以构建。您可以尝试使用 如果只查找简单字符串(名称)的出现,我认为根本不需要模式匹配。如果你的目标是推特的名字——在推特中提到它们时,它们的前缀不是@符号吗?如果是这样,首先只需寻找@符号并从那里开始 要检查@后面的字符串是否是1000万个字符串之一,ruakh提出的前缀树绝对是个好主

我有一系列的句子(推特)和超过1000万个名字。我想确定一句话(tweet)中是否提到了1000万个名字中的一个。我可以为所有可能的模式编译正则表达式,但我真的很想知道是否有一种有效的算法可以做到这一点


谢谢,

您可以构建。

您可以尝试使用

如果只查找简单字符串(名称)的出现,我认为根本不需要模式匹配。如果你的目标是推特的名字——在推特中提到它们时,它们的前缀不是@符号吗?如果是这样,首先只需寻找@符号并从那里开始

要检查@后面的字符串是否是1000万个字符串之一,ruakh提出的前缀树绝对是个好主意
.

你可以从另一个方向着手。当句子出现时,将其拆分为标记,并为每个标记构建一个正则表达式模式,类似于^token\s*。将它们与1000万个名字进行比较,假设每个名字都在网上。

谢谢。它们的前缀并不总是@。有些品牌名称不是。谢谢,但这涉及到对句子进行分块以检测名词,这对于数百万个句子来说是相当昂贵的。我希望我正确理解了你的建议。谢谢。这很有趣。布卢姆传单可能会有帮助。我现在就来试试。你是什么意思:一千万个正则表达式,还是一个所有一千万个名字都组合在一起的正则表达式?不管怎样,这听起来都比人类应该被允许的有趣但说真的,这不是正则表达式的工作。