假设您想在第一个出现的点之前注入子字符串,preg_replace() 是一种直接技术。在模式中使用字符串锚的开头和否定字符类,最多只能有一个替换。因为\K重新开始全串匹配,替换字符串只替换匹配的文字点。
代码:(Demo)
$strings = [
"ch-1268312613-photo.jpg",
"foo.inc.php",
".htaccess",
"no_ext",
];
var_export(
preg_replace(
'~^[^.]*\K\.~',
'_thumb.',
$strings
)
);
输出:
array (
0 => 'ch-1268312613-photo_thumb.jpg',
1 => 'foo_thumb.inc.php',
2 => '_thumb.htaccess',
3 => 'no_ext',
)
只是为了好玩,这些 2-call 技术也可以工作:(Demo)
echo implode('_thumb.', explode('.', $string, 2));
和
echo implode('_thumb', sscanf($string, '%[^.]%s'));