2013-06-24 35 views
0

我使用Twitter API流式传输来每分钟收集数千条推文。 它们需要与关键字列表(可以包含空格)进行匹配。文本字符串中的匹配短语(数组)

这是我目前的方法:

$text = preg_replace('/[^a-z0-9]+/i', ' ', strtolower($data['text'])); 
$breakout = explode(" ", $text); 

$result = array_intersect($this->_currentTracks, $breakout); 

我砍鸣叫进言,和他们的比赛对我目前的关键字。 这适用于所有没有空格的关键字。

如果我想找到例如“Den Haag”,它不会出现,因为字符串被分解为单词(基于空格)。

有关我如何快速完成此操作的任何想法?

亲切的问候, 添

+1

尝试使用'strpos()'? – 2013-06-24 22:00:45

+0

最简单的方法就是在原始字符串中执行另一个正则表达式。每分钟成千上万的速度相当缓慢。你会没事的。 – paddy

+0

有没有一种方法可以基于数组执行reggex? –

回答

0

如果你有一个短小组关键字来搜索的,你可能会很乐意与基本正则表达式的方法:

if (preg_match('/\b(keyword1|keyword2|Den Haag)\b/i', $data['text'], $matches) !== FALSE) { 
} 

使用大组关键字可能尽管如此,特别是如果关键字倾向于以相同的前缀(在此示例中为“关键字”)开始时,会有些不理想。另一方面,它可能比搜索算法的一些更复杂的PHP实现更快。

您可以使用implode('|',$ array)从关键字数组中准备regexp字符串,但是,如果您从外部来源获取关键字(在脚本中未对其进行硬编码),您将拥有以确保它正确转义(关键字可能包含类似|的字符)。