不区分大小写的国际搜索和替换
International case insensitive search and replace
我有一个显示搜索结果的 PHP 页面。搜索不区分大小写。例如,用户可能会在任何情况下搜索词 "FÖR"。一个对应的匹配项是文本“öga för öga”。找到匹配项后,我想显示匹配项,但使用 CSS 对其进行不同的着色。我当前的解决方案有 preg_match_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;
}
示例搜索:FÖR
示例匹配:öga för öga
想要的结果:öga <span class="searchHighlight">för</span> öga
编辑:当我将代码更改为
时,我开始工作了
preg_match_all("/\b{$needle}\b/ui", $haystack, $matches);
if (is_array($matches[0]) && count($matches[0]) >= 1) {
$unique = array_count_values($matches[0]);
foreach ($unique as $match => $value) {
$haystack = preg_replace("/\b{$match}\b/ui", '<span class="searchHighlight">'.$match.'</span>', $haystack);
}
}
/ui
在 preg_replace
的参数中指定使用 Unicode 并且不区分大小写 I。 (\b
指定字边界)
要在 php 中进行搜索和替换,您可以使用:
$result = preg_replace('/FÖR/ui', '<span class="searchHighlight">[=10=]</span>', $text);
要在 php 中使用正则表达式匹配 Unicode 字母,您可以使用:\p{L}
正则表达式 html 匹配的文本是否像 för
中那样转义?
如果是,您必须在 \p{L} 匹配它之前取消转义它。
我有一个显示搜索结果的 PHP 页面。搜索不区分大小写。例如,用户可能会在任何情况下搜索词 "FÖR"。一个对应的匹配项是文本“öga för öga”。找到匹配项后,我想显示匹配项,但使用 CSS 对其进行不同的着色。我当前的解决方案有 preg_match_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;
}
示例搜索:FÖR
示例匹配:öga för öga
想要的结果:öga <span class="searchHighlight">för</span> öga
编辑:当我将代码更改为
时,我开始工作了preg_match_all("/\b{$needle}\b/ui", $haystack, $matches);
if (is_array($matches[0]) && count($matches[0]) >= 1) {
$unique = array_count_values($matches[0]);
foreach ($unique as $match => $value) {
$haystack = preg_replace("/\b{$match}\b/ui", '<span class="searchHighlight">'.$match.'</span>', $haystack);
}
}
/ui
在 preg_replace
的参数中指定使用 Unicode 并且不区分大小写 I。 (\b
指定字边界)
要在 php 中进行搜索和替换,您可以使用:
$result = preg_replace('/FÖR/ui', '<span class="searchHighlight">[=10=]</span>', $text);
要在 php 中使用正则表达式匹配 Unicode 字母,您可以使用:\p{L}
正则表达式 html 匹配的文本是否像 för
中那样转义?
如果是,您必须在 \p{L} 匹配它之前取消转义它。