2

文字列の最後の文字から 7 番目と 8 番目の文字を削除したい。

$string = "Tucson AZ 85718"; 

州の略語を削除しようとしています。さまざまな郵便番号に対してこれらの文字列がたくさんあるので、「AZ」を「」に置き換えることはできません.

4

4 に答える 4

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);
于 2012-04-14T20:40:01.673 に答える
2
$string = substr_replace($string, "", -8, 2);
于 2012-04-14T20:37:53.570 に答える
0

php regexpの専門家ではありませんが、

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

あなたのために仕事をします。可変長の都市名で機能する必要があります。:wq

于 2012-04-14T20:45:34.877 に答える
0

免責事項:私はアメリカ人ではなく、アメリカの住所をよく知りません!

私は間違いなくpreg_replaceまたはでこれを行います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で、2番目の引数preg_replaceのは、パターン内の括弧内の1番目と3番目のブロックに関連しています((.* )それぞれ(\d{5}))。

仮定:

  • 州コードはすべて大文字です
  • 郵便番号はすべて5桁です
于 2012-04-14T20:48:31.867 に答える