语法高亮,不区分大小写的语法

Syntax highlighting, with case insensitive syntax

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

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

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

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

<?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></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"