2012-01-09 3 views
0

文字列を検索して置換する必要があります。文字列の最後の文字列を置き換えます。ここでregex文字列の右側から単一の一致を置き換えます。

は(普通の検索/置換を行います)私の作業コードです:

  • $にstreet_address = "123セントマーチンセント"
  • $:期待される結果の

    PREG_REPLACE("/(\b{$abbr}\b)/i", "$long" , $street_address) 
    

    例abbr = "St"

  • $ long = "Street"
  • return = "123 St Martin Street"

Stの最後のオカレンスだけをStreetに置き換えて欲しいです。

答えて

2

あなたはこのように、負のlokaheadを使用することができます。

$str = "123 St Martin St"; 
$abbr="(\b)St(\b)"; 
$long="Street"; 
var_dump(preg_replace("~$abbr(?!.*?$abbr)~", "$1" . $long . "$2", $str)); 

OUTPUT:

string(20) "123 St Martin Street" 
+0

これはうまくいっていて、略語のさまざまなバリエーションに対応しました。ありがとう。 – lcdservices

+0

あなたが大歓迎です、それはあなたのために働いてうれしいです。 – anubhava

1
PREG_REPLACE("/(.*(\b{$abbr}\b.*)*)\b{$abbr}\b/i", "$1$long" , $street_address) 

これは比較的非効率的な場合があります。

+0

文字列がそれに 'st'を持っており、またst''で終わる場合にのみ機能します。 –

+0

ロケットが正しい - 文字列の他の場所にある値に依存します。 – lcdservices

+0

私は '(...)? 'を意図しました –

関連する問題