代码之家  ›  专栏  ›  技术社区  ›  Niladri Banerjee - Uttarpara

php:从字符串中查找单词

  •  -3
  • Niladri Banerjee - Uttarpara  · 技术社区  · 5 年前

    假设我有一个包含“man”、“map”、“php”、“pop”、“pnp”等元素的数组。 每个元素的长度为3个字符。

    我怎么能从数组中找到“ma”这样的单词?或者“P?然后数数。

    说,

    “马”?,数到2

    “P”?P“,它会数到3

    $arr = [ "man", "map", "php", "pop", "pnp"];
    //For 'ma?' OR 'p?p' 
    $find = strtoupper('ma?');
    
    foreach ($arr as $value) {
        echo preg_match("/[$find]{3}/", strtoupper($value));
    }
    
    3 回复  |  直到 5 年前
        1
  •  -1
  •   Rakesh Jakhar    5 年前

    可以使用正则表达式来处理此问题

    $arr = [ "man", "map", "php", "pop", "pnp"];
    //For `ma`
    preg_match_all ("/ma(.*)/U", implode('',$arr), $matches);
    echo count($matches[0]);
    
    //For p?p
    preg_match_all ("/p(.*)p/U", implode('',$arr), $matches);
    echo count($matches[0]);
    
        2
  •  1
  •   Nick SamSmith1986    5 年前

    这里有一个使用regex的方法。首先,该模式通过更改 ? . 用断字断言包围它( \b )然后我们使用 preg_match_all 针对内爆的字符串(使用 - 连接,假设单词不包含 - ;如果有,只需使用一个不包含的字符(换行符可以工作)和 普雷格尔马奇亚尔 告诉我们有多少场比赛:

    $words = array("man", "map", "php", "pop", "pnp");
    $patterns = array("ma?", "p?p");
    foreach ($patterns as $pattern) {
        $regex = '\b(' . str_replace('?', '.', $pattern) . ')\b';
        $count = preg_match_all("/$regex/", implode('-', $words), $matches);
        echo "$pattern matched $count times on " . implode(',', $matches[1]) . ".\n";
    }
    

    输出:

    ma? matched 2 times on man,map. 
    p?p matched 3 times on php,pop,pnp.
    

    Demo on 3v4l.org

        3
  •  -1
  •   louisld    5 年前

    你可以使用regex。您只需要做一个循环,并使用函数preg_match()来测试数组中每个元素的模式。

    这里是博士: https://www.php.net/manual/en/function.preg-match.php