【发布时间】:2015-12-13 07:18:21
【问题描述】:
我正在尝试使用正则表达式搜索一些数组。有些词应该是“可选的”,这意味着如果它们在字符串中就很好(为了相关性)
这是我的尝试:
preg_match_all('/(?:animal)? (lamina)/', $searchExpression, $matches);
但它不起作用。我在这里想要实现的是,字符串必须包含 lamina,并且可能包含动物。 如果字符串同时包含 animal 和 lamina,那么它的相关性会比只匹配 lamina 的匹配更好。
如何修复正则表达式?以及如何对匹配项进行排序,还要查看哪个“匹配”最好。
即
$animalStuff = array('animal lamina', 'lamina', 'animal');
前 2 个项目应该匹配,第三个不应该。和动物层可能应该是最相关的。如何执行相关性?
$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.
}
计算匹配的数量,可能会让我得到我认为的最佳相关性,但我只需要先让正则表达式工作即可尝试。
【问题讨论】:
-
单词后面的空格也必须是可选的,否则只匹配第二个单词。
-
如果 lamina 在字符串中? /(叶片)/gi
-
删除正则表达式中的空格,给我结果,但它们都不包含“动物”,因为第一个应该: ray(2) { [0]=> array(1) { [0 ]=> string(6) "lamina" } [1]=> array(1) { [0]=> string(6) "lamina" } } array(2) { [0]=> array(1) { [0]=> string(6) "lamina" } [1]=> array(1) { [0]=> string(6) "lamina" } }
-
如果您想包含单词
animal,请取消非捕获组。?:使其不捕获,尾随?使整个组可选。 -
这是什么意思 chris85?可以举个例子吗?