我在用数字内的符号替换特定格式时遇到问题。我用下面的编码来替换,但是对我来说替换符号不起作用,结果出不来。
$try = "100-1-1 abc/bbb";
$try_1 = "100-1-1-16 John/James";
echo(replaceHyphen($try));
echo(replaceHyphen($try_1));
<script>
function replaceHyphen($str) {
$i = -1;
for($i=0; $i < strlen($str); $i++) {
if($str[$i] == "-") break;
}
for($i++; $i < strlen($str); $i++) {
if($str[$i] == "-") $str[$i] = '/';
if($str[$i] == " ") break;
}
return $str;
}
</script>
我想要如下的预期结果:
100-1/1 abc/bbb
100-/1/16 John/James
希望有人能指导我如何解决。谢谢。
这个任务与这个问题非常相似,所以我将调整我的答案以适应这些角色要求。
匹配前导非连字符,然后匹配第一个出现的连字符或从上一个匹配的结束位置(而不是字符串的开头)开始匹配。 然后匹配零个或多个非连字符,然后忘记到目前为止匹配的所有字符,然后匹配下一个出现的连字符。 用正斜杠替换这个单字符匹配。
代码:(演示)
function replaceHyphen(string $str): string
{
return preg_replace(
'#(?:[^-]*-|\G(?!^))[^-]*\K-#',
'/',
$str
);
}
输入/输出:
100-1-1 abc/bbb
=> 100-1/1 abc/bbb
100-1-1-16 John/James
=> 100-1/1/16 John/James