【问题标题】:compare portion of the string using php使用php比较字符串的一部分
【发布时间】:2011-01-10 17:44:39
【问题描述】:

我想检查搜索关键字“cli”或“ent”或“cl”是否存在于字符串“client”中并且不区分大小写。我将 preg_match 函数与模式 '\bclient\b' 一起使用。但它没有显示正确的结果。匹配未找到错误获取。

请大家帮忙

谢谢

【问题讨论】:

    标签: php regex


    【解决方案1】:

    我不会为此使用正则表达式,这是额外的开销和复杂性,而常规字符串函数就足够了。为什么不改用stripos()

    $str = 'client';
    $terms = array('cli','ent','cl');
    foreach($terms as $t) {
        if (stripos($str,$t) !== false) {
            echo "$t exists in $str";
            break;
        }
    }
    

    【讨论】:

    • strpos()/stripos()strstr()/stristr() 更快,内存效率更高,如果您只需要知道给定的子字符串是否存在。
    • echo stripos('client',$filterstr);结果显示为 0。当我的搜索关键字 ='cli'
    • 是的。如果您阅读stripos() 的文档,您会看到 if 返回子字符串匹配的位置索引,而不是子字符串本身。如果要输出匹配的术语,只需echo $filterstring。你没有提到你想要在你的函数中什么样的输出,只是你想匹配一个子字符串,所以我假设你只是在寻找一个真/假匹配。
    • 感谢您的帮助和快速回复。我使用该函数得到了结果。再次感谢。 $pos1 = stripos("client", $filterstr); if ($pos1 !== false) $flag=1;返回 $flag;
    • 我同意,但是striposstrpos 相对,越慢,字符串越长,正则表达式可能会更快。在stackoverflow.com/questions/1962031/… 上查看类似的问题和我的基准
    【解决方案2】:

    尝试模式/cli?|ent/

    解释:

    cli 匹配第一部分。我?使 i 在搜索中成为可选项。

    | 表示或,与 client 匹配。

    【讨论】:

      【解决方案3】:

      \b 是单词边界,它不会匹配client 中的cli,您需要删除\b

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-05
        • 1970-01-01
        • 2023-02-14
        • 2018-09-16
        • 1970-01-01
        • 2015-10-19
        相关资源
        最近更新 更多