语法突出显示,使用不区分大小写的语法

时间:2016-11-19 00:48:12

标签: php str-replace case-sensitive

我正在尝试编写一个搜索和语法高亮显示器。我们假设我们有一个基本查询,即根据关键字查询国家/地区,例如 uni

现在,我正在使用Sphinx,从数据库中获取与此关键字匹配的结果,并且我使用不区分大小写的搜索。狮身人面像返回的结果如下:

Tanzania, United Republic of
United Arab Emirates
United Kingdom
United States
Igaunija
Estados unidos Mexicanos

我现在想要通过将关键字包装在<span>中来突出显示这些字符串中的搜索关键字。

为实现这一目标,我试图做到以下几点:

$search='uni';
foreach($keyword as $text) { // $keyword is an array, containg each found result one by one
  $text=str_replace($search, "<span>".$search."</span>", $text);
}

使用此代码,只有IguanijaEstados unidos Mexicanos会突出显示,因为在其他所有情况下,关键字都以大写字母开头。如果我将str_replace更改为str_ireplace,则会突出显示每个搜索关键字,但在前几个条目中,大写U将替换为小写u },所以从United Kingdom开始,我得到united Kingdom。如何突出显示搜索关键字,并在结果中保留字符的大小写?

我想要的结果是这样的:

Tanzania, <span>Uni</span>ted Republic of
<span>Uni</span>ted Arab Emirates
<span>Uni</span>ted Kingdom
<span>Uni</span>ted States
Iga<span>uni</span>ja
Estados <span>uni</span>dos Mexicanos

1 个答案:

答案 0 :(得分:3)

您可以使用正则表达式来保留源字符串的大小写。

<?php

$unis = <<< UNIS
Tanzania, United Republic of
United Arab Emirates
United Kingdom
United States
Igaunija
Estados unidos Mexicanos
UNIS;

var_dump(preg_replace('/(uni)/i','<span>$1</span>',$unis));

<强>输出

string(190) "Tanzania, <span>Uni</span>ted Republic of
<span>Uni</span>ted Arab Emirates <span>Uni</span>ted Kingdom
<span>Uni</span>ted States Iga<span>uni</span>ja Estados
<span>uni</span>dos Mexicanos"