LoginSignup
0
1

More than 5 years have passed since last update.

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

Posted at

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]))$';
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1