Python 正規表現を使用して IP 範囲を一致させたい。
例の場合。Google ボットの IP 範囲は次のとおりです
66.249.64.0 - 66.249.95.255
re.compile(r"66.249.\d{1,3}\.\d{1,3}$")
これを行う方法がわかりませんか?これはJavaを使用して行われたことがわかりました。
使用socket.inet_aton
:
import socket
ip_min, ip_max = socket.inet_aton('66.249.64.0'), socket.inet_aton('66.249.95.255')
if ip_min <= socket.inet_aton('66.249.63.0') <= ip_max:
#do stuff here
これを使用できます:
re.compile(r"66\.249\.(?:6[4-9]|[78]\d|9[0-5])\.\d{1,3}$")
やる気がある場合は、次のものに置き換えることができます\d{1,3}
:
(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)
説明:
正規表現エンジンは、数値範囲が何であるかを知りません。範囲を記述する唯一の方法は、すべての可能性を交互に記述することです。
6[4-9] | [78][0-9] | 9[0-5]
6 can be followed by 4 to 9 --> 64 to 69
7 or 8 can be followed by 0 to 9 --> 70 to 89
9 can be followed by 0 to 5 --> 90 to 95
最後の桁は次のとおりです。
[01]?\d{1,2}|2[0-4]\d|25[0-5]
3 桁目は次のとおりです。
6[4-9])|[78]\d|9[0-5]