PHP

wordpressのDBをpostgresを使ってインストールする方法

当ブログも利用しているブログ/CMSツールのwordpressですが、利用環境がPHP + mysqlという環境でした。

まぁ確かにmysqlのほうが利用できるサーバーも多いですし・・・なんですが!一応postgresのほうをメインに触ってるし、ここはpostgresでインストールしてみたいな・・・
とおもったら、つい最近postgresでインストールできるようなプラグインを作った方が。。

wordpress.org – PostgreSQL for WordPress (PG4WP)

BSDあれこれ – WordPress 2.8.2をPostgreSQL用のプラグインPG4WPで運用

使い方は結構簡単。BSDあれこれさんのほうで書かれているように、上のPG4WPをダウンロードして、wp-contentフォルダに展開するだけ。
すげー。中を見ると全部のSQL文をラッピングしている感じですね。

これでDBに依存しなくなった!wordpress、更に最強説。

正規表現の「非貪欲性(non greedy)(ungreedy)」について

正規表現のチートシートをダウンロードして、眺めつつ多少手の込んだ正規表現を書いていたのですが・・・

そこに「ungreedy」の文字が。

ungreedy?辞書で調べると出てこないので”greedy”で検索。

すると、「貪欲性」。

ど、貪欲・・・?

とりあえず、使ってみようと思いハマってた対象文字列に適用したらHit!
うまく取り出せました!

ちなみに、ハマってたSQLはこんな感じ。

<?php
$_target = "<div><h1>Top Page</h1><div>";

preg_replace("/<.*>/",$_target);

?>

普通に考えてみれば、これで”div”とかとれんじゃね?とか思ったんですが、甘い。
取れる文字列は「<div><h1>Top Page</h1><div>」と全体が取れます。

何故か?これは正規表現の「*」の動きが問題です。

「*」は直前の正規表現に0回以上一致です。そして今回の場合「.*」としたので、「何でもいい文字列が0回以上一致」となります。

何でも良いので、「>」も「.」に含まれてしまったという事です・・・。

これは正規表現の「*」が貪欲(greedy)であるというところが問題です。
貪欲とは「最大単位で一致」させていくという方法です。今回の場合、「.*」と書いてある瞬間に、一番最大単位である文字全体をマッチとしてしまったようです。

そこで、非貪欲(non greedy)にさせるモードがこちら。

<?php
$_target = "<div><h1>Top Page</h1><div>";

preg_replace("/<.*?>/",$_target);

?>

変更した点は1つ。「.*?」に書き換えました。
こう書き換えると非貪欲性になるので、最小単位での一致検索になります。これで「div」が取り出せるようになりました。
なかなかこういう違いは気づきにくいですね・・・まだまだ正規表現初心者だと思いました。

【参考資料】

http://www.python.jp/Zope/articles/tips/regex_howto/regex_howto_6

Eclipse(PDT)で、PHPのタスクタグが効かなくなる件。

未だに私がEclipse3.3を使う理由がこれなんです。

どうしてもPHP以外の拡張子でプログラムを組んでいる場合、コンテンツタイプのPHPにその拡張子を紐付けるじゃないですか。
それでソースを書いていて、タスクタグを結構書きながらプログラムするんですよ。

<?php
//TODO  データが複数来る場合の対応を追記予定
?>

こんなの。

で、こういう風に書くとEclipseってタスクという所に自動でこの中身が一覧表示されるので、未実装部分とか懸念点部分を列挙しておけば後で改修も楽なんです。

この機能が使えない。追加した拡張子に対して。

バグかなーとか思って、EclipseのBugzilla見てみたらなんか該当してそうなのが・・・。

Eclipse Bugs – Tasks Tags don’t work in user added php file types

やっぱりバグなのか・・・。そしてステータスが終わって無いという事はまだ放置ですか。
EclipseのPDTやめて違うやつ使うかな・・・。