正则表达式检查数组是否包含一些单词

时间:2013-09-20 23:35:00

标签: php regex

我有一系列匹配的单词:

$search = array("lorem","dolor","sit");

要搜索的数组:

 $results= array(
       "Lorem ipsum dolor sit amet, consectetur",
       "Ut enim ad minim veniam, quis nostrud exercitation"
       "Duis aute irure dolor in reprehenderit in voluptate velit esse"
       "Excepteur sint occaecat cupidatat non proident"
    );

是否有正则表达式返回 true ,其中两个给定的单词匹配?

2 个答案:

答案 0 :(得分:1)

您可以在正则表达式中使用单词边界\b

  

单词边界是\ w和\ W(非单词字符)之间的位置,或者如果字符串开头或结尾(分别)带有单词字符,则位于字符串的开头或结尾。

所以也许这样......

foreach ($results as $result) {
   $pattern = "/\b(" . implode('|', $search) . ")\b/i";
   $found   = preg_match_all($pattern, $result, $matches);

   if ($found) {
     print_r($matches[0]);
   }
}

或者您可以取消搜索数组并将其用作正则表达式:

foreach ($results as $result) {
   $found = preg_match_all("/\b(?:lorem|dolor|sit)\b/i", $result, $matches);
   if ($found) {
     print_r($matches[0]);
   }
}

输出:

Array
(
    [0] => Lorem
    [1] => dolor
    [2] => sit
)
Array
(
    [0] => dolor
)

答案 1 :(得分:0)

您可以通过此

生成要搜索的正则表达式
$regex = '/(' . implode('|', $search) . ')/i';

将是:

/(lorem|dolor|sit)/i

/i使它无用。

然后,您可以使用preg_match_all()的返回值来查看匹配字词的数量。