我正在尝试使用正则表达式搜索某些数组。有些单词应该是" optional",这意味着如果它们在字符串中(对于相关性)它会很好
这是我的尝试:
preg_match_all('/(?:animal)? (lamina)/', $searchExpression, $matches);
虽然不起作用。我想在这里实现的是,这个字符串必须包含lamina,并且可能包含动物。 如果该字符串同时包含动物和叶片,则它将具有更好的相关性,然后匹配与叶片匹配的匹配。
如何修复正则表达式?我如何对比赛进行排序,看看哪一个匹配"最好的。
即
$animalStuff = array('animal lamina', 'lamina', 'animal');
前两项应该匹配,第三项不应该匹配。和动物叶片应该是最相关的。如何执行相关性?
$animalStuff = array('animal lamina', 'lamina', 'animal');
$results = array();
foreach ($animalStuff as $searchExpression)
{
preg_match_all('/(?:animal)? (lamina)/', $searchExpression, $matches);
var_dump($matches);
// Do something here to decide if it should be in the top of array, etc.
}
计算匹配数量,可能会让我得到最好的相关性,但我只需要让正则表达式首先尝试一下。
答案 0 :(得分:0)
答案 1 :(得分:0)
(这应该是评论)
这里有几个问题,如果你停止使用正则表达式来查找匹配项,大多数问题就会消失。那么为什么要使用正则表达式呢?
e.g。考虑:
function matchwords($allwords, $requiredwords, $subject)
{
$subject=preg_replace("/\W/", ' ', $subject);
$subject=explode(' ', $subject);
if (count(array_intersect($requiredwords, $subject)) {
return count(array_intersect($allwords, $subject));
}
return 0;
}
尝试对其进行基准测试 - 它实际上可能比使用正则表达式更快。对于大字集,反转数组并使用array_intersect_key()可能会更快。