跨度的css边界崩溃?

时间:2012-07-25 03:23:45

标签: php css border

我正在搜索并在php中替换字符串。

如果我的示例字符串是

  

我的名字是Matthew Scott Hailwood

然后当搜索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中间边框厚度是其两倍。

我要做的是:a:如果有两个边缘,则一起移除中间边框,或者更可能是将两个边框合并为一个。

我的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);
}

1 个答案:

答案 0 :(得分: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);
}

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