脱力系備忘録BloG ホーム  »  ログ » 2012年09月

[PHP] preg_replace 後方参照でちょっと悩んだ  

強力な正規表現が使えるPHPの関数「preg_replace」で、後方参照を使おうとしたらちょっと悩んだのでメモ。

後方参照とは正規表現の機能の一つで、括弧「()」で括った内容が一時的にバッファに記憶され、その内容を後で使えるというもの。
置換処理でよく使います。
たとえば、

何らかの文字列-500 を 何らかの文字列-800 に変換したい場合、

preg_replace("/(何らかの文字列にマッチする正規表現)-500/", "$1-800", 文字列);

このように、「何らかの文字列にマッチする正規表現」を「()」で括り、replacement部に「$1」としてやると、$1の部分に()で括った内容が入るわけです。
「()」の数を増やせば、$1,$2,$3・・・と使えます。

で、今回悩んだのは、「$1」の直後に数字が来る場合です。

何らかの文字列500 を 何らかの文字列800 の場合、先ほどは間に「-」がありましたが今回は直後に数字が来ます。つまり、

preg_replace("/(何らかの文字列にマッチする正規表現)500/", "$1800", 文字列);

こうなる。
でも、これでは「$1」なのか「$18」なのかわかりません。
で、PHPマニュアルを見ると「\${1}」としなさいと書いている。
なるほど。
PHPなので、「{$1}」とやりがちだけどそれは間違い。
それと、ちょっと注意なのは、replacement部の括りがダブルクォーテーションなのかシングルクォーテーションなのかで「\」の有無が変わってくる。

おさらい。

preg_replace("/(何らかの文字列にマッチする正規表現)500/", "\${1}800", 文字列);
preg_replace("/(何らかの文字列にマッチする正規表現)500/", '${1}800', 文字列);

です。
違いは良く見てね。
なお、直後が数字でない場合はダブルクォーテーションの場合でも「\」はいらない。

preg_replace("/(何らかの文字列にマッチする正規表現)500/", "$1EightHundred", 文字列);

category: プログラミング

コメント: (0)   トラックバック: --

PHPはリクエスト変数名のドットがアンダーバーに変わる  

$_POSTや$_GETで値を渡すときの変数名。
普段は変数名にドット「.」を使うことがないので今まで気が付かなかったが、今回ひょんなことで気が付いた。
リクエスト変数名に「.」を使うと、自動的にアンダーバー「_」に変わるんですね。
あらためて変数名の基本をPHPマニュアルで見てみると、「.」は使えないんですね。おほほ。今まで知らなかった。
ということは、$_COOKIEにも影響するんでしょうね。

category: プログラミング

コメント: (0)   トラックバック: --

VAIOでWakeup On Lan機能を利用する  

ひょんなことでVAIO「PCV-HS13BL5」という古い機種が手に入った。
何に使おうか?

手元にアナログTVチューナーボードがある。

ふと思いついた。
実家はケーブルテレビに加入している。
そのケーブルテレビにはアナログ信号のテレビが流れている。
それの録画機にしてしまおう。
というのも、実家に帰った時に、「時々(というかまれに)録画したいテレビがあるんだよなあ」と両親につぶやかれるときがある。
しかし、両親はびっくりするほどの機械音痴。
当然録画機など買わない。買ってあげない。使えないんだもん。
なので、このPCを録画機にして、こちらから遠隔操作で録画、再生してあげるというアイデアです。

しかし、まれな録画のためにこのPCを起動しっぱなしというのは電気代この節電が叫ばれるときに電気の無駄になる。
両親を電話で起動し、PCの電源を入れさせるという方法もあるのだが、これはちょっとナンセンス。というのも、往々にしてこちらの都合通りに動かない可能性が高い。

うーん・・・。
ずいぶん昔からその言葉だけは知っていた「Wakeup On LAN」とやら言うものを、今更ながら試してみようか。

というわけで、ようやく本題に入るのです。

が、続きは後日!

category: 雑多記事

コメント: (0)   トラックバック: --

プロフィール

最近の記事

最近のコメント

フルーツメール
ブログランキング・にほんブログ村へ
にほんブログ村

▲ Pagetop