我有一系列匹配的单词:
$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 ,其中两个给定的单词匹配?
答案 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()
的返回值来查看匹配字词的数量。