这个问题后: Pattern for check single occurrency into preg_match_allstr_pos和preg_match之间哪个更有效?
我明白我的模式必须只包含每个周期一个字,因为,在这个问题报道的情况下,我必须找到“Microsoft”和的“Microsoft Exchange”,我不能修改我的正则表达式,因为这两种可能性是从数据库中给出的!
所以我的问题是:哪个是超过200 preg_match和相同数量的str_pos之间的更好的解决方案,以检查char的子集是否包含这些单词?
我试图写这两个解决方案可能的代码:
$array= array(200+ values);
foreach ($array as $word)
{
$pattern='<\b(?:'.$word.')\b>i';
preg_match_all($pattern, $text, $matches);
$fields['skill'][] = $matches[0][0];
}
另一种方法是:根据
$array= array(200+ values);
foreach ($array as $word)
{
if(str_pos($word, $text)>-1)
{
fields['skill'][] = $word;
}
}
基于REGEX的函数比大多数其他字符串函数更慢。顺便说一下,如果你像'$ pattern ='<\ b(?:'。$ word1。'|'。$ word2。'|'。$ word3。'|''那样做你的测试也可以用一个正则表达式来完成。 。$ word4。')\ b> i';'一次可以使用多少个单词取决于正则表达式可以使用多长时间。我创建了12004个字符长的测试正则表达式。似乎不是最大的。 – JustOnUnderMillions
'str_pos()'通常比preg_match快3-20倍,因为preg_match主要用于探测字符串的格式,并根据正则表达式检索它的部分。 –