Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 国际不区分大小写的搜索和替换_Php_Regex - Fatal编程技术网

Php 国际不区分大小写的搜索和替换

Php 国际不区分大小写的搜索和替换,php,regex,Php,Regex,我有一个显示搜索结果的PHP页面。搜索不区分大小写。例如,用户在任何情况下都可能搜索单词“FÖR”。一个对应的匹配是文本“öga föröga”。当找到匹配项时,我希望显示匹配项,但使用CSS对其进行不同的着色。我当前的解决方案有一行preg\u match\u all(“/$needle+/i”,$haystack,$matches)执行不区分大小写的正则表达式搜索。它适用于拉丁字符,但不适用于国际字符。特别是,我使用的是瑞典语、希腊语和希伯来语字符。我该怎么做?此处的示例代码: privat

我有一个显示搜索结果的PHP页面。搜索不区分大小写。例如,用户在任何情况下都可能搜索单词“FÖR”。一个对应的匹配是文本“öga föröga”。当找到匹配项时,我希望显示匹配项,但使用CSS对其进行不同的着色。我当前的解决方案有一行
preg\u match\u all(“/$needle+/i”,$haystack,$matches)执行不区分大小写的正则表达式搜索。它适用于拉丁字符,但不适用于国际字符。特别是,我使用的是瑞典语、希腊语和希伯来语字符。我该怎么做?此处的示例代码:

private function highlightStr($needle, $haystack) {
     // return $haystack if there are no strings given, nothing to do.
    if (strlen($haystack) < 1 || strlen($needle) < 1) {
        return $haystack;
    }
    preg_match_all("/$needle+/i", $haystack, $matches);
    if (is_array($matches[0]) && count($matches[0]) >= 1) {
        foreach ($matches[0] as $match) {
            $haystack = str_replace($match, '<span class="searchHighlight">'.$match.'</span>', $haystack);
        }
    }
    return $haystack;
}

/ui
preg\U replace
的参数中指定使用Unicode并将大小写设置为Insensitive。(
\b
指定单词边界)

要在php中执行搜索和替换,可以使用:

$result = preg_replace('/FÖR/ui', '<span class="searchHighlight">$0</span>', $text);
$result=preg_replace('/FÖR/ui','$0',$text);

要在php中将Unicode字母与正则表达式匹配,可以使用:\p{L}

是要由正则表达式html匹配的文本,如
fö;r

如果是,您必须在\p{L}匹配它之前取消对它的替换。

我缺少指定unicode的
/u
选项。有了它,一切都井然有序。
$result = preg_replace('/FÖR/ui', '<span class="searchHighlight">$0</span>', $text);