我想删除字符串中的第 7 个和第 8 个到最后一个字符。
$string = "Tucson AZ 85718";
我正在尝试删除州缩写。我有一堆用于不同邮政编码的字符串,所以我不能只用''替换“AZ”。
我想删除字符串中的第 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);
会为你做这项工作。应该使用可变长度的城市名称。:wq
免责声明:我不是美国人,也不太了解美国的邮政地址!
我肯定会这样做preg_replace
or preg_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})
分别)。
假设: