如何使用 PHP 删除字符串中的第 7 个和第 8 个到最后一个字符


How do I remove the 7th and 8th to last characters in a string with PHP?

我想删除字符串中倒数第 7 和第 8 个字符。

$string = "Tucson AZ 85718"; 

我正在尝试删除状态缩写。 我有一堆用于不同邮政编码的字符串,所以我不能只用"'"替换"AZ"。

$string = substr($string, 0, -8) . substr($string, -5);

演示:

php> $string = "Tucson AZ 85718";
php> echo substr($string, 0, -8) . substr($string, -5);
Tucson 85718

正则表达式也可以完成这项工作。这将删除任何 2 个大写字符的字符串及其后面的空格:

$string = preg_replace('/'b[A-Z]{2}'b /', '', $string);
$string = substr_replace($string, "", -8, 2);

不是PHP正则表达式专家,但似乎

$string=preg_replace(" {w{1}} ", " ", $string);

会为你做这项工作。应使用可变长度的城市名称。

免责声明:我不是美国人,不太了解美国的邮政地址!

我肯定会用preg_replacepreg_match_all来做到这一点:

$string   = "Tucson AZ 85718"; 
// Don't be mislead by the second [A-Z], this means all uppercase characters
$pattern  = '/^(.+ )([A-Z]{2} )('d+)$/';
preg_match_all($pattern, $string, $matches);
var_dump($matches);

这将为您提供一个如下所示的数组:

array(4) {
  [0]=>
  array(1) {
    [0]=>
    string(15) "Tucson AZ 85718"
  }
  [1]=>
  array(1) {
    [0]=>
    string(7) "Tucson "
  }
  [2]=>
  array(1) {
    [0]=>
    string(3) "AZ "
  }
  [3]=>
  array(1) {
    [0]=>
    string(5) "85718"
  }
}

。其中,第 2、第 3 和第 4 个索引将分别是城市、州代码和邮政编码。

或者,您可以使用 preg_replace 去除前缀:

$string   = "Tucson AZ 85718"; 
$pattern  = '/^(.+ )([A-Z]{2} )('d+)$/';
$normalised = preg_replace($pattern, '$1$3', $string);

。这将为您提供"Tucson 85718",其中第二个参数中的$1 and $3 preg_replace与模式中括号中的第一个和第三个块相关(分别为(.* )('d{5}))。

假设:

  • 州代码都是大写的
  • 邮政编码均为 5 位数字