2013-09-20 36 views
0

我有匹配单词的数组:正则表达式检查,如果数组包含一些话

$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" 
    ); 

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

+0

为什么它必须是正则表达式? – meda

+0

,因为我需要在xpath中使用它比较 –

+0

xpath compare()做字符串比较,不是吗? – Anthony

回答

0

您可以生成一个正则表达式这个

$regex = '/(' . implode('|', $search) . ')/i'; 

搜索,这将是:

/(lorem|dolor|sit)/i 

/i使其无壳。

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

1

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

单词边界是\ w和\ W(非单词char)之间的位置,或者在字符串开始或结束(分别)与单词字符结尾的位置。

因此,也许这样的事情..

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 
) 
相关问题