str_replace从字符串中的特定位置开始


str_replace from a particular position in a string

我想替换字符串中的一个字符串,但只替换它的特定部分,例如从字符位置7开始

例如"test.string.1",我想替换第二个"。"例如"2"

我显然有这个:

$string = str_replace('.', '2', $string);

但这将替换两个句点,我只想替换第二个句点,有些字符串可能有多个句点,我们只想替换任意字符位置后的句点。例如5个字符后的第一个周期

必须使用substr和str_replace。

$string = 'test.string.1';
$string = substr($string, 0, 7).str_replace('.', '2', substr($string, 7));
echo $string;

结果:test.string21

strpos()的简单性为目标,用第三个参数表示起点可能是最干净的。如果起点后有一个点,请替换,完成操作。这种技术之所以有效,是因为您正在用一个单独的单字节字符替换一个单独单字节字符——如果这种奢侈改变了,这种技术可能就不再合适了。

正则表达式技术同样稳定,但在未经训练的人看来,这种模式可能有点笨拙。^标记字符串的开始;CCD_ 3表示任何非换行符。点后面呈现的{5}(量词)将匹配字符串中的前5个字符。[^.]*是一个具有零个或多个量词的否定字符类。这将匹配任意数量的非点字符。'K表示忘记任何先前匹配的字符。最后,'.匹配要替换的目标文字点。

代码:(演示)

$str = "test.string.1.sometext.more";
$startingOffset = 5;
$pattern = '~^.{' . $startingOffset . '}[^.]*'K'.~';
$replacement = 2;
echo preg_replace($pattern, $replacement, $str);
echo "'n---'n";
$offset = strpos($str, '.', $startingOffset);
if ($offset !== false) {
    $str[$offset] = $replacement;
}
echo $str;

输出:

test.string21.sometext.more
---
test.string21.sometext.more