求助,字符串替换问题
有一段文本是这样的 你现在是一位优秀的写作专家,在写作时会自主的选择和运用各种写作技巧、写作风格,或是引用名言名句。
我现在想请你帮忙写一份{1}。主要内容为:"{2}"。写作的字数大概为{4}字。
写作额外要求(如果没写要求则没有额外要求):{3}
其中的{1}…{4}会被用户输入的内容替换。
现在用户输入了一段这样的文本 你现在是一位优秀的写作专家,在写作时会自主的选择和运用各种写作技巧、写作风格,或是引用名言名句。
我现在想请你帮忙写一份小说中人物介绍:。主要内容为:"第一章苏乐醉酒后睡了个陌生男人,......决绝和坚定"。写作的字数大概为1000字。
写作额外要求(如果没写要求则没有额外要求):小说中人物介绍:。
我应该怎么把这段文本中用户输入的部分分别加上一个 span 标签呢?
大家的评论我都看到了,实现上当然可以拿到用户的输入直接加上 span 标签,或者记录好用户的输入,在需要的时候进行替换。但是我目前的现状是用户的输入已经是日志保存在表里了,我也不想动这块的业务逻辑。要将用户的输入展示一下只是后台的一个小功能。
下面是我实现的两种方案:
一:
function promptTranslate($prompt, $user_input)
{
preg_match_all('/({\d+})/', $prompt, $matches);
if (empty($matches[0])) {
return $user_input;
}
$separator = '|';
$matches = $matches[0];
for ($i = 0; $i < count($matches); $i++) {
$prompt = str_replace($matches[$i], $separator, $prompt);
}
$sections = explode($separator, $prompt);
foreach ($sections as $section) {
$user_input = str_replace($section, $separator, $user_input);
}
$inputs = explode($separator, $user_input);
$inputs = array_values(array_filter($inputs));
foreach ($inputs as &$input) {
$input = "<span class='bg-success'>{$input}</span>";
}
$result = '';
foreach ($sections as $key => $section) {
$temp = $inputs[$key] ?? '';
$result .= $section . $temp;
}
return $result;
}
二:
function promptTranslateV2($prompt, $user_input)
{
preg_match_all('/({\d+})/', $prompt, $matches);
if (empty($matches[0])) {
return $user_input;
}
$separator = '';
$matches = $matches[0];
for ($i = 0; $i < count($matches); $i++) {
$prompt = str_replace($matches[$i], $separator, $prompt);
}
$result = '';
$same = true;
for ($i = $j = 0; $i < mb_strlen($user_input); $i++) {
$ch_p = mb_substr($prompt, $j, 1);
$ch_u = mb_substr($user_input, $i, 1);
if (!$ch_p) {
$result .= $ch_u;
continue;
}
if ($ch_u == $ch_p) {
if (!$same) {
$result .= '</span>';
}
$j++;
$same = true;
} else {
if ($same) {
$result .= "<span class='bg-success'>";
}
$same = false;
}
$result .= $ch_u;
}
return $result;
}
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: