這個問題後: 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主要用於探測字符串的格式,並根據正則表達式檢索它的部分。 –