IPの範囲を検索するための正規表現
別の記事に便利なツールを紹介しているので、そこを是非参照してください:
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]))$';