在PHP中,如果你想要高效地高亮显示长字符串中重复的子字符串,可以通过以下步骤实现:
你可以使用正则表达式来查找重复的子字符串。以下是一个示例代码,用于查找字符串中所有重复的子字符串:
function findRepeatedSubstrings($str, $minLength = 2) {
$n = strlen($str);
$repeated = [];
for ($i = 0; $i < $n; $i++) {
for ($j = $i + 1; $j < $n; $j++) {
$substr = substr($str, $i, $j - $i + 1);
if (strlen($substr) >= $minLength && strpos($str, $substr, $j + 1) !== false) {
$repeated[$substr] = true;
}
}
}
return array_keys($repeated);
}
$str = "这是一个测试字符串,测试字符串中有重复的子字符串。";
$repeatedSubstrings = findRepeatedSubstrings($str);
print_r($repeatedSubstrings);
找到重复的子字符串后,你可以使用str_replace
函数将这些子字符串用HTML标签包裹起来,以实现高亮效果:
function highlightRepeatedSubstrings($str, $repeatedSubstrings) {
foreach ($repeatedSubstrings as $substr) {
$highlighted = "<span style='background-color: yellow;'>$substr</span>";
$str = str_replace($substr, $highlighted, $str);
}
return $str;
}
$highlightedStr = highlightRepeatedSubstrings($str, $repeatedSubstrings);
echo $highlightedStr;
function findRepeatedSubstrings($str, $minLength = 2) {
$n = strlen($str);
$repeated = [];
for ($i = 0; $i < $n; $i++) {
for ($j = $i + 1; $j < $n; $j++) {
$substr = substr($str, $i, $j - $i + 1);
if (strlen($substr) >= $minLength && strpos($str, $substr, $j + 1) !== false) {
$repeated[$substr] = true;
}
}
}
return array_keys($repeated);
}
function highlightRepeatedSubstrings($str, $repeatedSubstrings) {
foreach ($repeatedSubstrings as $substr) {
$highlighted = "<span style='background-color: yellow;'>$substr</span>";
$str = str_replace($substr, $highlighted, $str);
}
return $str;
}
$str = "这是一个测试字符串,测试字符串中有重复的子字符串。";
$repeatedSubstrings = findRepeatedSubstrings($str);
$highlightedStr = highlightRepeatedSubstrings($str, $repeatedSubstrings);
echo $highlightedStr;
$minLength
参数来控制最小匹配长度,避免匹配过短的子字符串。假设输入字符串为"这是一个测试字符串,测试字符串中有重复的子字符串。"
,输出可能如下:
这是一个<span style='background-color: yellow;'>测试字符串</span>,<span style='background-color: yellow;'>测试字符串</span>中有重复的子字符串。
这样,重复的子字符串就会被高亮显示。