代码之家  ›  专栏  ›  技术社区  ›  Simon

正则表达式,如果单词包含关键字,则将其逐部分高亮显示

  •  0
  • Simon  · 技术社区  · 16 年前

    我以前也问过同样的问题 here ,但现在我需要用另一种方式,然后用另一种方式来点亮键盘。我想这个例子会有帮助的

    $str = "i like programming very much";
    $key = "gram"; 
    

    我要买点像这样的东西 赞成的意见 明

    $str = "i like <span class='first'>pro</span><span class='second'>gram</span><span class='firs'>ing</span>"
    
    why preg_replace("/([^\s]*?)(".preg_quote($key).")([^\s]*)/iu","<span class="first">$0</span><span class="second">$1</span><span class="first">$2</span>",$str);
    doesn't work?
    

    2 回复  |  直到 9 年前
        1
  •  1
  •   Toto    16 年前

    所以,不是:

    preg_replace("/([^\s]*?)(".preg_quote($key).")([^\s]*)/iu","<span class="first">$0</span><span class="second">$1</span><span class="first">$2</span>",$str);
    

    你必须做到:

    preg_replace("/([^\s]*?)(".preg_quote($key).")([^\s]*)/iu","<span class='first'>$1</span><span class='second'>$2</span><span class='first'>$3</span>",$str);
    
        2
  •  1
  •   Ian    16 年前

    $words = explode(' ', "quick brown fox");
    $out = array_map(process, $words);
    return join(' ', $out);
    

    并定义

    function process($word) {
        $p = strpos($word, 'gram');
        if ($p === FALSE) return $word;
        /// take apart pieces with substr and friends, reformat in HTML, and return them
        $left = substr($word, 0, $p);
        $match = substr($word, $p, strlen('gram'));
        $right = substr($word, $p+strlen('gram'));
        return some_function_of($left, $match, $right);
    }
    

    再努力一点,但你想怎么做就怎么做。

    推荐文章