我有以下数据集:
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或更多)它将匹配所有记录,因为它也意味着什么都不匹配。
答案 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);