MySQL
正規表現
regexp
regularexpression

Mysqlで正規表現を使って、指定のIP範囲からの検索履歴を見つける

More than 1 year has passed since last update.

IPの範囲を検索するための正規表現

別の記事に便利なツールを紹介しているので、そこを是非参照してください:

http://qiita.com/kasia-some/items/75a0ad8b6245365ab91f

Mysqlで正規表現

簡単です。

select * from table where column regexp 'パターン';

regexp は0か1を返すので、自分の探している値がちゃんと指定したパターンにマッチしているかを確認すると安心です。

例えば:

select '値' regexp 'パターン';

結果が1だったら、正規表現が正しいことになります。

注意点:
正規表現をSQL文で使う時、preg_matchのように'//'で囲ってしまうと動かない。phpのコードからそのまま正規表現を持ってきた場合、間違えて//も入れちゃうと思い通りの結果が出てこないので気をつけましょう。

実際にサンプルSQL書いてみる

例えば、「123.123.123.120」から「123.123.123.125」のIP範囲を使って、検索ログテーブル「search_log」にあるデータを全部取得したい。

select * 
from search_log 
where 
ip regexp '^123\.123\.123\.(1(2[0-5]))$';

複数のパターンにマッチしているデータを検索する場合、シンプルにOR条件を追加します。
例えば、先程のIPに、「123.123.123.130」から「123.123.123.135」の範囲も追加したい場合:

select * 
from search_log 
where 
ip regexp '^123\.123\.123\.(1(2[0-5]))$'
or ip regexp '^123\.123\.123\.(1(3[0-5]))$';