我需要知道如何以最少的通话次数可靠地做到这一点。
我有一个字符串,我需要从中删除第8个字符。字符是什么都没关系,我只需要删除第8个字符即可。
我想到了这个,但是对我来说有点笨拙。
// 12345678901234567890
$str = '5NMSG3AB1AH353158';
// after removing char, result should be:
// 5NMSG3A1AH353158
$r = str_split($str);
unset($r[7]);
echo join('', $r);
可能是正则表达式吗?
答案 0 :(得分:2)
赞
$str = '5NMSG3AB1AH353158';
echo preg_replace('/^(.{7})./', '\1', $str);
输出:
5NMSG3A1AH353158
说明
^
字符串的开头(...)
捕获.
匹配任何{7}
七次.
任意一次匹配然后替换
\1
第一个捕获组基本上捕获前7个字符,然后匹配第8个字符,并将其替换为捕获的7个字符。有效地删除了第八名。
更新
这是我喜欢的另一种方式(我认为我没有使用过那种功能感知大学):
$s = '5NMSG3A1AH353158';
echo substr_replace($s,'',7,1); //strings are 0 based
substr_replace()用替换中给定的字符串替换由start和(可选)length参数分隔的字符串副本。
混合 substr_replace (混合 $ string ,混合 $ replacement ,混合 $ start [,混合 $ length ])
http://php.net/manual/en/function.substr-replace.php
简单。
答案 1 :(得分:2)
以下是一些解决方案:
$str = substr($str, 0, 7) . substr($str, 8);
$str = substr_replace($str, '', 7, 1);
$str = preg_replace('/(.{7})./', '$1', $str, 1);
$str = preg_replace('/.{7}\K./', '', $str, 1);
我会选择substr()
或更好的substr_replace()
,因为这肯定是最快,最容易阅读的。
答案 2 :(得分:1)
substr_replace
使这个过程非常简单。
$string = substr_replace($string, '', 7, 1);
它也可以将字符串数组作为第一个参数,并对所有字符串进行相同的替换,这很方便。