После этого вопроса: Шаблон для проверки единичного вхождения в preg_match_all
Я понимаю, что мой шаблон должен содержать только одно слово за цикл, потому что в случае, описанном в этом вопросе, я должен найти «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;
}
}
$pattern='<\b(?:'.$word1.'|'.$word2.'|'.$word3.'|'.$word4.')\b>i';
, и сколько слов вы можете использовать одновременно, зависит от того, насколько длинным может быть регулярное выражение. Я создал тестовое регулярное выражение длиной 12004 символа. Вроде не макс. - person JustOnUnderMillions   schedule 16.03.2017str_pos()
обычно в 3-20 раз быстрее, чем preg_match, потому что preg_match в основном используется для проверки формата строки и извлечения ее разделов на основе регулярных выражений. - person Ross Keddy   schedule 16.03.2017