PHP+SQLiteの環境で正規表現を使った検索を行うには、sqlite_create_functionを使ってユーザ定義関数を登録する。
データベースをオープンしたら、sqlite_create_functionにDBのハンドル、登録するユーザ定義関数の名前、そのユーザ定義関数のコールバック関数、ユーザ定義関数の引数の与える。
以下の例ではsqlite_regex_matchというコールバックを用意しているが、見れば分かるようにmb_eregをくるんだだけである。後は例のようにSELECTのWHERE句でRGX(正規表現, 検索対象のカラム)と指定すれば、マッチするデータを返してくれる。手軽だ。
$db = sqlite_open('database');
sqlite_create_function($db, 'RGX', 'sqlite_regex_match', 2);
$query = "SELECT * FROM tabale WHERE RGX('^(mo|ho)ge$', column)";
$result = sqlite_array_query($db, $query, SQLITE_ASSOC);
sqlite_close($db);
function sqlite_regex_match($regex, $str) {
if (mb_ereg($regex, $str)) {
return 1;
}
return 0;
}