【问题标题】:PHP preg_match searching efficientPHP preg_match 搜索高效
【发布时间】:2015-07-28 20:34:59
【问题描述】:

PHPregex 中,我尝试提出一种解决方案来根据不同情况查找字符串。我有一个包含单词的字符串,

$animals = "Elephant Horse Cow";

现在,出于某种原因,我想使用preg_match() 而不是strpos() 来制作一些案例。我有一个包含不同字符串的数组,我想迭代我的数组以查找案例。我的搜索不区分大小写。

这是我的案例。

1) 以不同顺序出现在字符串中的所有动物名称,如

$my_case1 = "Horse Elephant Cow";

2) 任何动物都会出现在字符串中,但不是 case 1 ,例如

$my_case2 = "Horse Elephant";

3) 任何动物都会以复数形式出现,或者后面有一个额外的字符串,比如

$my_case3 = "Horses";

我的动物数组就像,

$all_animals = ["Horses Cows", "Elephant", "Goats", "Goat"];

我使用strpos() 制作了这些案例,但它们不可靠。

EDIT1:我的代码

function mySearch($name,$animals)
{
    $my_case1 = array();
    $my_case2 = array();
    $my_case3 = array();
    $all_cases = [];

    $a = explode(' ', $name);
    foreach($a as $key) {

        foreach($animals as $animal) {

        if ($animal !== $key)
        {
            if ((strpos( strtolower($key), str_replace(' ', '', strtolower($animal)) ) !== FALSE) && (strpos( strtolower($key), str_replace(' ', '', strtolower($animal)))) == 0)
            {
                echo $animal. "<br>";
            }
            else if ((strpos( $key, substr( $animal, 0, -1) ) !== FALSE) && (strpos( $key, $animal ) !== 0) )
            {
                echo $animal. "<br>";
            }
        }

        if (strpos(strtolower($animal), strtolower($key)) !== false) {

            if (strpos($animal, $key) !== false) {
                if ($animal !== $key)
                {
                    echo $animal. "<br>";
                }
            } else
            {
               echo $animal. "<br>";
            }
        }
    }
    }
}
    return $all_cases; // empty as testing is directing my echo
}

【问题讨论】:

  • 你能提供你使用strpos的代码吗?
  • 是的,让我更新我的问题。 @chris85
  • 为什么“Horses Cows”是分组的,而“Goats”是分开的?
  • 另外,我可以推荐使用regex101.com/#pcre
  • @SpYk3HH 他们是例子,如果用户搜索山羊,他应该得到山羊。

标签: php regex


【解决方案1】:

strpos() 区分大小写。你要stripos()

提醒 - 如果匹配在字符串的开头,这两个函数都返回 0,如果找不到字符串,则返回 FALSE。要区分差异,需要使用严格的比较运算符( === 和 !=== )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-21
    • 1970-01-01
    • 2010-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多