2012-04-14 44 views
2

我想刪除字符串中的第7和第8個字符。如何從PHP中刪除字符串中的第7個和第8個字符?

$string = "Tucson AZ 85718"; 

我試圖刪除州名縮寫。我有一堆用於不同郵政編碼的字符串,所以我不能用「'替換」AZ「。

+0

對於此字符串,可以使用$字符串=的preg_replace(「%(+)\。? (。+?)\ s(。+?)%','$ 1 $ 3',$ string)。更精確的模式需要更多的例子。 – 2012-04-14 20:38:26

回答

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 

regex還可將做的工作。後此人會刪除任何2大寫字符的字符串和空間:

$string = preg_replace('/\b[A-Z]{2}\b /', '', $string); 
+0

謝謝你,正則表達式完美運作。 – Carson 2012-04-14 22:08:55

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

是否會刪除最後7位和8位的字符? – Lion 2012-04-14 20:39:10

+0

啊,我誤解了你的問題,更新了答案 – 2012-04-14 20:50:36

+0

假設你的數據都形成良好(和你的樣本相同),這是迄今爲止最好的解決方案 – BenLanc 2012-04-14 21:11:07

0

不是一個PHP的正則表達式的專家,但似乎

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

會爲你做的工作。 wq

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" 
    } 
} 

...其中第二,第三和第四索引將分別爲城市,州代碼和郵政編碼。

或者,你可以只剝除與preg_replace前綴:

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

...它會給你「圖森85718」,其中的第二個參數preg_replace$1 and $3涉及第一和第三塊在模式的括號中(分別爲(.*)(\d{5}))。

假設:

  • 國家代碼全部大寫
  • 郵政編碼都是5個位數
相關問題