str_replace来自字符串中的特定位置

时间:2015-06-25 01:14:05

标签: php string

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

e.g。 'test.string.1',我想替换第二个'。'与... '2'

我显然有这个:

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

但是这将取代两个时期,我只想更换第二个时段,而某些字符串可能有多个时段,我只想替换任意字符位置后的时段。例如,第一个时期之后5个字符

2 个答案:

答案 0 :(得分:2)

您必须使用substr和str_replace。

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

结果:test.string21

答案 1 :(得分:0)

strpos()的简单性(第3个参数代表您的起点)定位目标点可能是最干净的方法。如果在起点之后存在一个点,请替换并完成。该技术之所以有效,是因为您用一个单字节字符替换了一个单字节字符-如果这种奢侈度发生变化,则该技术可能不再适用。

正则表达式技术同样稳定,但是对于未经训练的眼睛来说,这种模式看起来有些笨拙。 ^标记字符串的开头; .代表任何非换行符。渲染的{5}(量化符)将紧跟点之后,将与字符串中的前5个字符匹配。 [^.]*是带有零个或多个量词的否定字符类。这将匹配任意数量的非点字符。 \K表示忘记所有先前匹配的字符。最后,\.与要替换的目标文字点匹配。

代码:(Demo

$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