function replace($str,$index,$s){
//参数定义:
//$str 原字符串
//$index 要替换的位置(第一个"-"前面的位置为0,最后一个"-"后面的位置等于减号数量)
//$s 要替换的内容
$str=rtrim(rtrim($str,'html'),'.');
$arr=explode('-',$str,14); //如果是前面固定13个减号,可以加一个参数14
if($index>=count($arr)){
$arr[count($arr)-1]=$s;
}else if($index<0){
$arr[0]=$s;
}else{
$arr[$index]=$s;
}
return (implode('-', $arr).'.html');
}
$string='21--------43-----哈啊.html';
$newStr=replace($string,0,'aaa'); //第1个减号前面的位置替换为aaa
echo $newStr . '<br>';
$newStr=replace($newStr,2,'bbb'); //第2个减号后面的位置替换为bbb
echo $newStr . '<br>';
$newStr=replace($newStr,8,'ccc'); //第8个减号后面的位置替换为ccc
echo $newStr;
注意:原字符串结尾部分不能连续两个"html"或者连续两个"."连着
如果原字符串在替换的时候不加".html"就没有这个限制了,就像这样
function replace($str,$index,$s){
//参数定义:
//$str 原字符串
//$index 要替换的位置(第一个"-"前面的位置为0,最后一个"-"后面的位置等于减号数量)
//$s 要替换的内容
$arr=explode('-',$str,14); //如果是前面固定13个减号,可以加一个参数14
if($index>=count($arr)){
$arr[count($arr)-1]=$s;
}else if($index<0){
$arr[0]=$s;
}else{
$arr[$index]=$s;
}
return (implode('-', $arr).'.html');
}
$string='21--------43-----哈啊';
$newStr=replace($string,0,'aaa'); //第1个减号前面的位置替换为aaa
echo $newStr . '.html<br>';
$newStr=replace($newStr,2,'bbb'); //第2个减号后面的位置替换为bbb
echo $newStr . '.html<br>';
$newStr=replace($newStr,8,'ccc'); //第8个减号后面的位置替换为ccc
echo $newStr . '.html';
应该能用吧
追问可以用,谢谢!但是突然发现一个问题,因为最后面的“哈啊”是中文的,里面有可能有减号,怎么才能控制到了13个减号的后面的都替换呢?因为前面13个减号都是固定的,后面的是中文+.html,可能包含减号
![](https://video.ask-data.xyz/img.php?b=https://iknow-pic.cdn.bcebos.com/4b90f603738da9776bb11445be51f8198718e3c6?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_600%2Ch_800%2Climit_1%2Fquality%2Cq_85%2Fformat%2Cf_auto)
你看我这样修改正常不,怕后面用了整个程序出错