PHP:preg_replaceで勘違いしていた内容
「●●」「★★」「▼▼」「▼▼」「★★」を
「●●」「★★」「▼▼」「□□」「★★」とするなら
「「最後の▼▼を□□に置きかえ」ってやればOK」
と思い・・・
「preg_replace」(文字列の置き換え)を使うことにした。
まずは
「●●」「★★」「▼▼」「▼▼」「★★」を
「●●」「★★」「▼▼」「▼▼」「□□」としてみる。
- $aaa = “「●●」「★★」「▼▼」「▼▼」「★★」”;
- $aaa = preg_replace(‘/「★★」$/’, ‘「□□」’, $aaa);
- echo $aaa;
でOK。
[/「★★」$/]:
[/]と[/]ではさまれた箇所を置き換える。
で、[$]は最後のって意味合い。
ってことで
つまり「最後の[「★★」]を置き換えろ」ってなる感じ。
じゃぁ次に求めている内容の
「●●」「★★」「▼▼」「▼▼」「★★」を
「●●」「★★」「▼▼」「□□」「★★」ってのをやってみる。、
で良いはずだと思いきや・・・
と変化なし。
としてみると
となる。
[(.*)]は任意の文字たち。
わかりづらいので、[▼▼]の前後の[「」]をとってみる
とすると
となる。
メタ文字について。
「 ^ 」…先頭から
「 $ 」…末尾から
http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/php_k09.htm
これが思い違いしていた元凶のような感じ。
秀丸さんや各テキストエディタの正規表現をみると表現が違う。
「 $ 」…行末
これらをあわせて考えると・・・
上記だと
「複数ある▼▼の最後にでてくる▼▼」でなく、
「行末の前が▼▼」を指定しているっぽい。
つまり「▼▼○[行末]」とかではなくて、「▼▼[行末]」のみ指定。
ってことは…preg_replaceを一回だけでやるのはダメじゃん。
「「▼▼」がいくつ含まれているかをチェックして、最後に表示される「▼▼」のみ置換え」っていう風にする必要がある。