その他
    ホーム 技術発信 DoRuby PostgreSQLでの正規表現検索

    PostgreSQLでの正規表現検索

    この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

    こんにちは、cloverです!

    先日仕事で、ドコモのシークレットコードに対応する作業があったのですが、その際「電話番号(11ケタ)+シークレットコード(4ケタ)@ドコモ」の4ケタの部分以外の部分のマッチングが必要になりました。

    LIKE検索では難しいかなぁと思って先輩に聞いてみたら、何とPostgreSQLには正規表現でのマッチングが出来るとのこと。

    というわけで、ちょっと調べてみました~例えば、「090123456781234@ドコモ」というメールアドレスがあって、「09012345678xxxx@ドコモ(xxxxの部分は数値であれば何でもよい)」という条件で、マッチするデータがあるかを調べようとしたとき、
    PostgreSQLでは「~(チルダ)」を用いて、正規表現検索を行います。

    以下のような感じになります。

    select count(*) from users where mobile_email ~ ‘09012345678[0-9]{4}@ドコモ’;

    もちろんこれはRailsのfind文などでも使えるので、

    User.find(:first, :conditions => [“mobile_email ~ ?”, ”09012345678[0-9]{4}@ドコモ’])

    となります。

    「\d(数値)や\w(英数字)」などの表現の書き方はまたちょっと違うみたいなので、そのあたりも駆使して使ってみたいと思います☆