Вот так
$keywords = array('lorem','ipsum','dog','cat' );
$text="lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur";
preg_match_all('/\b('.implode('|', array_map('preg_quote',$keywords)).')\b/i', $text, $matches);
print_r($matches);
Вывод:
Array
(
[0] => Array
(
[0] => lorem
[1] => ipsum
)
[1] => Array
(
[0] => lorem
[1] => ipsum
)
)
Песочница
\b
- это граница слова (вещикак пробелы, пунктуация) ( ... )
- это группа захвата |
is или
Так что регулярное выражение выглядит как /\b(lorem|ipsum|dog|cat)\b/i
.И тогда preg_quote
избегает вещей, которые важны в Regex в ключевых словах (на всякий случай).Такие вещи, как .
, то есть любой символ, необходимо экранировать.
Если вы хотите убедиться, что у вас есть x
количество совпадений, то вы просто считаете.
if(isset($matches[1]) && count($matches[1]) > 2) then do something....
Вв этом случае вы можете использовать индекс 0
, но более правильно использовать 1
, потому что это для первой группы захвата, где 0 для любых совпадений.
Наслаждайтесь!