dongshenyu4638 2019-02-21 18:56
浏览 52

preg_replace返回空字符串[duplicate]

I am trying to highlight words in a text by using pregreplace. The words are within an array which I do feed into pregreplace. This used to work, but stopped maybe due to upgrading php in the past, now it returns nothing.

// Function highlights $words in $str 
function highlight_words($str, $words) {
    global  $color;
    if(is_array($words)) {
        foreach($words as $k => $word) {
            // $pattern[$k] = "~\b($word)\b~is";
            $pattern[$k] = "/$word/";
            $replace[$k] = '<span style="background: '.$color[2].';color:'.$color[4].';">\\1</span>';
        }
    }
    else {
        $pattern = "~\b($words)\b~is";
        $replace = '<span style="background: '.$color[2].';color:'.$color[4].';">\\1</span>';
    }
    return preg_replace($pattern,$replace ,$str);
}


echo highlight_words($text, $words);

values of pattern:

Array
(
[0] => /$18.5mUSD/
[1] => /$8,000,000.00/
[2] => /(at)/
[3] => /+43 688 649 45702/
...

values of $replace:

Array
(
[0] => <span style="background: #FF6B02;color:#FFFFFF;">\1</span>
[1] => <span style="background: #FF6B02;color:#FFFFFF;">\1</span>
[2] => <span style="background: #FF6B02;color:#FFFFFF;">\1</span>
[3] => <span style="background: #FF6B02;color:#FFFFFF;">\1</span>
...

preg_replace simply returns nothing. Seems to be a problem with array, but the syntax looks ok. If I change preg_replace to replace some simply regex pattern it will do, but it does not work with the array.

How can this be fixed?

</div>
  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 求帮我调试一下freefem代码
    • ¥15 R语言Rstudio突然无法启动
    • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
    • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
    • ¥15 用windows做服务的同志有吗
    • ¥60 求一个简单的网页(标签-安全|关键词-上传)
    • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
    • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
    • ¥100 为什么这个恒流源电路不能恒流?
    • ¥15 有偿求跨组件数据流路径图