0

我正在对字符串进行搜索和替换。

如果我的示例字符串是

我的名字是马修·斯科特·海尔伍德

然后当函数运行时搜索o输出变为(为了便于阅读,拆分为多行)

My name is 
Matthew 
Sc<span class="highlight">o</span>tt 
Hailw<span class="highlight">o</span><span class="highlight">o</span>d

那部分工作得很好。

我的css课然后有

.highlight{
    font-weight: bold;
    background-color: yellow;
    border: 1px dotted #a9a9a9;
}

这也很完美。

但在双字母的情况下,例如oo姓氏中的中间边框厚两倍。

我要做的是:如果有两个边框,则将中间边框全部删除,或者更有可能的是使两个边框合并为一个边框。

我的php函数是

function highlight($haystack, $needle, 
                   $wrap_before = '<span class="text_highlight">', 
                   $wrap_after = "</span>"){
    if($needle == '')
        return $haystack;
    $needle = preg_quote($needle);
    return preg_replace("/({$needle})/i", $wrap_before."$1".$wrap_after, $haystack);
}
4

1 回答 1

3

如果您使用正则表达式,正则/({$needle}+)/i表达式将匹配 o 组和单个 o 组。因此,您修改后的代码如下所示:

function highlight($haystack, $needle, 
                   $wrap_before = '<span class="text_highlight">', 
                   $wrap_after = "</span>"){
    if($needle == '')
        return $haystack;
    $needle = preg_quote($needle);
    return preg_replace("/({$needle}+)/i", $wrap_before."$1".$wrap_after, $haystack);
}

匹配一个或多个前+一个字符(或一组字符)。

于 2012-07-25T03:35:24.497 回答