我有一个字符串,我想知道如何在4个字符的间隔内保留1个字符。
$string = "bc7yad3odf0x"; // and goes like this..
我希望我的新字符串为:
yox
来自 bc7 y ad3 o df0 x
要省略的三个字符总是像char-char-number。
编辑:谢谢大家回答。我测试了你所有的答案,除了trisweb的preg_replace()解决方案之外,它们对我来说都很好,我得到了“Unknown modifier'g'”。 我接受Bhavik Shah的回答,因为我觉得这对我的理解最简单。答案 0 :(得分:4)
就是这样
preg_replace("/\w{3}(\w)/","$1",$string);
答案 1 :(得分:3)
$nstr = "";
$str_array = array();
//split string in chunks of 4-char strings
$str_array = str_split($string, 4);
//loop through all elements of array and take the required character
foreach($str_array as $key => $value){
$nstr .= $value[3];
}
echo $nstr;
有关str_split的更多详情。
答案 2 :(得分:1)
$str = "bc7yad3odf0x";
$final_str = "";
$len = strlen($str);
for($i = 3; $i < $len; $i = $i+4) {
$final_str .= substr($str, $i, 1)." ";
}
echo $final_str;
答案 3 :(得分:1)
$newString = implode(
'',
array_map(
function($value) {
return substr($value,-1);
},
str_split($string,4)
)
);
答案 4 :(得分:1)
$string = "bc7yad3odf0x";
$new_string = "";
$iterations = ceil(strlen($string)/4);
for ($i=1;$i <= $iterations; $i++)
{
$new_string .= substr($string, $i*4-1, 1);
}
print $new_string;
答案 5 :(得分:1)
看起来像正常表达的工作!
$kept = preg_replace('/[a-z]{2}[0-9]/gi', "", $string);
我们在这里做的是用空白字符串替换“letter-letter-number”类型的出现,删除它们。
如果字符串始终是您说的形式,那么它应该可以正常工作。但是,如果您总是希望保留第4个字符,则可以使用:
$kept = preg_replace('/.{3}(.)/gi', "$1", $string);
或者,要使用类似的使用反向引用的想法使第一个表单更严格,请使用:
$kept = preg_replace('/[a-z]{2}[0-9](.)/gi', "$1", $string);
有关在PHP中使用正则表达式的更多信息,请see this nice article.
答案 6 :(得分:1)
示例:
$text = "abcde";
echo $text[1]; // b
所以你可以把每一个角色都连接到你的最后一个字符串。这是我现在能想到的最简单的方式。
答案 7 :(得分:1)
更好地使用正则表达式:
$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;
答案 8 :(得分:1)
试试这个
$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;
答案 9 :(得分:1)
这很容易循环
$ans = "";
for($i = 3, $l = strlen($s); $i < $l; $i += 4)
$ans .= $s[$i];