誰かが私にIPアドレスとMACアドレスの正規表現を提案できますか?
私はpythonとdjangoを使用しています
たとえば、http:// [ipaddress] /SaveData/127.0.0.1/00-0C-F1-56-98-AD/
Macアドレスの場合、フォローしようとしましたが、機能しませんでした
([0-9A-F]{2}[:-]){5}([0-9A-F]{2})
^([0-9A-F]{2}[:-]){5}([0-9A-F]{2})$
誰かが私にIPアドレスとMACアドレスの正規表現を提案できますか?
私はpythonとdjangoを使用しています
たとえば、http:// [ipaddress] /SaveData/127.0.0.1/00-0C-F1-56-98-AD/
Macアドレスの場合、フォローしようとしましたが、機能しませんでした
([0-9A-F]{2}[:-]){5}([0-9A-F]{2})
^([0-9A-F]{2}[:-]){5}([0-9A-F]{2})$
import re
s = "http://[ipaddress]/SaveData/127.0.0.1/00-0C-F1-56-98-AD/"
re.search(r'([0-9A-F]{2}[:-]){5}([0-9A-F]{2})', s, re.I).group()
'00-0C-F1-56-98-AD'
re.search(r'((2[0-5]|1[0-9]|[0-9])?[0-9]\.){3}((2[0-5]|1[0-9]|[0-9])?[0-9])', s, re.I).group()
'127.0.0.1'
このスニペットをdjangoルーティング定義ファイルに配置します-urls.py
url(r'^SaveData/(?P<ip>((2[0-5]|1[0-9]|[0-9])?[0-9]\.){3}((2[0-5]|1[0-9]|[0-9])?[0-9]))/(?P<mac>([0-9A-F]{2}[:-]){5}([0-9A-F]{2}))', SaveDataHandler.as_view()),
正規表現には2つのキャプチャグループ(括弧)しか含まれていないため、アドレス全体が格納されていません(最初のグループは「上書き」されます)。これらを試してください:
# store each octet into its own group
r"([\dA-F]{2})[-:]([\dA-F]{2})[-:]([\dA-F]{2})[-:]([\dA-F]{2})[-:]([\dA-F]{2})[-:]([\dA-F]{2})"
# store entire MAC address into a single group
r"([\dA-F]{2}(?:[-:][\dA-F]{2}){5})"
範囲は2進数ですが、表現は10進数であるため、IPアドレスは扱いにくくなります。
# store each octet into its own group
r"(\d|[1-9]\d|1\d\d|2(?:[0-4]\d|5[0-5]))\.(\d|[1-9]\d|1\d\d|2(?:[0-4]\d|5[0-5]))\.(\d|[1-9]\d|1\d\d|2(?:[0-4]\d|5[0-5]))\.(\d|[1-9]\d|1\d\d|2(?:[0-4]\d|5[0-5]))"
# store entire IP address into a single group
r"((?:\d|[1-9]\d|1\d\d|2(?:[0-4]\d|5[0-5]))(?:\.(?:\d|[1-9]\d|1\d\d|2(?:[0-4]\d|5[0-5]))){3})"
/^([0-2]?\d{0,2}\.){3}([0-2]?\d{0,2})$/
IPv4アドレスとIPv6アドレスに使用でき/^([\da-fA-F]{1,4}:){7}([\da-fA-F]{1,4})$/i
ます。
これら2つをとして組み合わせることができます/^((([0-2]?\d{0,2}\.){3}([0-2]?\d{0,2}))|(([\da-fA-F]{1,4}:){7}([\da-fA-F]{1,4})))$/i
。ここでサンプルを見つけることができます。
参照:http ://snipplr.com/view/49994/ipv4-regex/、http ://snipplr.com/view/49993/ipv6-regex/
Macアドレスの場合。を使用できます/^([0-9A-F]{2}[-:]){5}[0-9A-F]{2}$/i
。ここでサンプルを見つけることができます。
これはMACアドレス用です:
([0-9A-F]{2}[:-]){5}([0-9A-F]{2})
s=256.1.1.1を検討してください。Michalの回答から少し変更を加えたいと思います。
def find_ip(s):
part = '(2[0-4]|1[0-9]|[0-9])?[0-9]|25[0-5]'
res =re.search(r'(^| )((%s)\.){3}(%s)' %(part,part), s,re.I )
if res:
return res.group().strip()
else:
return ''
注意'(^ |)'は、'256.1.1.1'から'56.1.1.1'を取得しないように、行の開始またはスペースを意味します。
さて、これは私がIPV4に使用するものです
([0-9] {1,3}。){3} [0-9] {1,3}
でテスト済み
127.0.0.1 255.255.255.255
そしてすべてのために働く
MACアドレスの検証が必要で、区切り文字なし、コロンとダッシュの区切り記号付きのMACアドレスを受け入れる必要があります。したがって、このような有効な形式
混合セパレーターはこのように無効です
そして、このような正規表現を使用した検証コード。
def validate_mac_address(mac_addr):
pattern = '^(([0-9a-fA-F]{2}[:]){5}([0-9a-fA-F]{2})|([0-9a-fA-F]{2}[-]){5}([0-9a-fA-F]{2})|[0-9a-fA-F]{12})$'
return not re.match(pattern, mac_addr) is None