从字符串中删除X char

时间:2018-10-19 20:13:32

标签: php

我需要知道如何以最少的通话次数可靠地做到这一点。

我有一个字符串,我需要从中删除第8个字符。字符是什么都没关系,我只需要删除第8个字符即可。

我想到了这个,但是对我来说有点笨拙。

//      12345678901234567890
$str = '5NMSG3AB1AH353158';
// after removing char, result should be:
// 5NMSG3A1AH353158
$r = str_split($str);
unset($r[7]);
echo join('', $r);

可能是正则表达式吗?

3 个答案:

答案 0 :(得分:2)

$str = '5NMSG3AB1AH353158';
echo preg_replace('/^(.{7})./', '\1', $str);

输出:

5NMSG3A1AH353158

Sandbox

说明

  • ^字符串的开头
  • (...)捕获
  • .匹配任何
  • {7}七次
  • .任意一次匹配

然后替换

  • \1第一个捕获组

基本上捕获前7个字符,然后匹配第8个字符,并将其替换为捕获的7个字符。有效地删除了第八名。

更新

这是我喜欢的另一种方式(我认为我没有使用过那种功能感知大学):

$s = '5NMSG3A1AH353158';
echo substr_replace($s,'',7,1); //strings are 0 based

sandbox

  

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);

它也可以将字符串数组作为第一个参数,并对所有字符串进行相同的替换,这很方便。