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

时间:2012-04-14 20:33:57

标签: php str-replace

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

$string = "Tucson AZ 85718"; 

我正在尝试删除州名缩写。我有一堆这些字符串用于不同的邮政编码,所以我不能只用''代替“AZ”。

4 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:2)

$string = substr_replace($string, "", -8, 2);

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

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

我肯定会使用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"
  }
}

...第二,第三和第四个索引分别是City,State代码和Zip代码。

或者,您可以使用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位数