使用str_replace函数回显错误数据

问题描述 投票:0回答:1

我在用数字内的符号替换特定格式时遇到问题。我用下面的编码来替换,但是对我来说替换符号不起作用,结果出不来。

$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

希望有人能指导我如何解决。谢谢。

str-replace
1个回答
0
投票

这个任务与这个问题非常相似,所以我将调整我的答案以适应这些角色要求。

匹配前导非连字符,然后匹配第一个出现的连字符或从上一个匹配的结束位置(而不是字符串的开头)开始匹配。 然后匹配零个或多个非连字符,然后忘记到目前为止匹配的所有字符,然后匹配下一个出现的连字符。 用正斜杠替换这个单字符匹配。

代码:(演示

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

© www.soinside.com 2019 - 2024. All rights reserved.