Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:字符串中每4个字符替换3个字符_Php_String_Replace_Intervals - Fatal编程技术网

PHP:字符串中每4个字符替换3个字符

PHP:字符串中每4个字符替换3个字符,php,string,replace,intervals,Php,String,Replace,Intervals,我有一个字符串,我想知道如何在4个字符的间隔中保留1个字符 $string = "bc7yad3odf0x"; // and goes like this.. 我希望我的新字符串为: yox 它来自bc7 y ad3 o df0 x 要输入的三个字符始终类似于字符编号 编辑:谢谢大家的回答。我测试了你所有的答案,除了trisweb的preg_replace()解决方案,它们对我来说都很好,我得到了“未知修饰符‘g’”。 我接受Bhavik Shah的回答,因为我认为这是我理解的最简单的回答。

我有一个字符串,我想知道如何在4个字符的间隔中保留1个字符

$string = "bc7yad3odf0x"; // and goes like this..
我希望我的新字符串为:

yox
它来自bc7 y ad3 o df0 x

要输入的三个字符始终类似于字符编号

编辑:谢谢大家的回答。我测试了你所有的答案,除了trisweb的preg_replace()解决方案,它们对我来说都很好,我得到了“未知修饰符‘g’”。 我接受Bhavik Shah的回答,因为我认为这是我理解的最简单的回答。

$str=“bc7yad3odf0x”;
$str = "bc7yad3odf0x";
$final_str = "";
$len = strlen($str);

for($i = 3; $i < $len; $i = $i+4) {
    $final_str .= substr($str, $i, 1)." ";
}

echo $final_str;
$final_str=“”; $len=strlen($str); 对于($i=3;$i<$len;$i=$i+4){ $final_str.=substr($str,$i,1)。”; } echo$final_str;
有关的更多详细信息。

$string=“bc7yad3odf0x”;
$new_string=“”;
$iterations=ceil(strlen($string)/4);

对于($i=1;$i似乎是正则表达式的工作

$kept = preg_replace('/[a-z]{2}[0-9]/gi', "", $string);
我们在这里所做的是用一个空白字符串替换出现的“字母数字”,删除它们

如果字符串的格式始终与您所说的相同,那么它应该可以正常工作。但是,如果您总是希望保留第四个字符,则可以使用:

$kept = preg_replace('/.{3}(.)/gi', "$1", $string);
或者,要使用类似的方法使用反向引用使第一个表单更加严格,请使用:

$kept = preg_replace('/[a-z]{2}[0-9](.)/gi', "$1", $string);
有关在PHP中使用正则表达式的详细信息,请参见

preg_replace("/\w{3}(\w)/","$1",$string);

在php中,您可以访问类似字符串的数组

例如:

$text = "abcde";
echo $text[1]; // b
因此,您可以将每个forth字符连接到最后一个字符串。这是目前我能想到的最简单的方法。

最好使用正则表达式:

$var = "bc7yad3odf0x";

$var = preg_replace("/[a-z]{2}[0-9]([a-z])/i","$1",$var);

echo $var;

$var = "bc7yad3odf0x";

$var = preg_replace("/[a-z]{2}[0-9]/i","",$var);

echo $var;
试试这个

$y = 3;
for($i=0; $i<strlen($string); $i++){
    if($y < strlen($string)){
        $out .= substr($string,$y,1);
        $y = $y+4;
    }else{
        break;
    }
}
echo $out;
$y=3;
对于($i=0;$i来说,循环很容易

$ans = "";
for($i = 3, $l = strlen($s); $i < $l; $i += 4)
    $ans .= $s[$i];
$ans=”“;
对于($i=3,$l=strlen($s);$i<$l;$i+=4)
$ans.=$s[$i];

请参见。?原始字符串的长度总是相同的吗?@John Conde我尝试过preg_replace()但我只保留了第一个字符,并保留了接下来的三个字符。我想不出一种方法来改变它。@Quentin Engles不,原始字符串的长度几乎从来都不一样。也许你应该把它放在一个循环中,跳转为4,一个示例字符串的长度与问题中的长度相同。你的解决方案是很好,只要没有问题之外的任何其他条件。如果字符串的长度始终相同,则可能不需要循环。我将询问提问者。
$var = "bc7yad3odf0x";

$var = preg_replace("/[a-z]{2}[0-9]([a-z])/i","$1",$var);

echo $var;

$var = "bc7yad3odf0x";

$var = preg_replace("/[a-z]{2}[0-9]/i","",$var);

echo $var;
$y = 3;
for($i=0; $i<strlen($string); $i++){
    if($y < strlen($string)){
        $out .= substr($string,$y,1);
        $y = $y+4;
    }else{
        break;
    }
}
echo $out;
$ans = "";
for($i = 3, $l = strlen($s); $i < $l; $i += 4)
    $ans .= $s[$i];