正则表达式关键字建议

时间:2013-05-31 05:13:47

标签: php regex

我有以下数据集:

names = ["brad pitt", "george clooney", "james cameron"];

我需要一个匹配“brad pitt”和“george clooney”的正则表达式:

"brad peter clooney"

此外,它应匹配:"brad pitt",当查询为"brad peter pitt"

请注意我使用的是PHP,我可以拆分查询并对其进行操作。例如,我可以试试这个:

((brad)+.*(peter)+.*(pitt)+.*+)

但它不匹配,因为我在每个名字后面都有1个或更多,如果它放*(0或更多)它将匹配所有记录,因为它也意味着什么都不匹配。

2 个答案:

答案 0 :(得分:0)

所以你想要匹配一个字符串,如果它有任何单词。 为此,您可以在\s+上拆分字符串,并使用表达式中的每个单词,如:

word1|word2|word3

您可能还想添加一些\b/i,例如(此次引用为//):

/\b(?:word1|word2|word3)\b/i

或者您可以使用三个单独的表达式或indexOf()个检查。

答案 1 :(得分:0)

好的,这是一个简单的想法:

$arr = array("brad pitt", "george clooney", "james cameron");
$str = "brad peter clooney";

foreach($arr as $val)
{
   $tmpptrn = str_replace(" ", "|", $val);
   $pattern = "/($tmpptrn)/i";

   if(preg_match_all($pattern, $str, $matches))
   {
       //do whatever with the results

       $match = $matches[1][0];
       if(!empty($match))
       {
           $arra[] = array_filter($arr, function($el) use ($match) { return ( strpos($el, $match) !== false ); });

       }

   }
}

//print out the results
print_r($arra);