IP地址和MAC地址的正则表达式

4 投票
7 回答
26351 浏览
提问于 2025-04-16 13:35

有没有人能给我推荐一个用来匹配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})$

7 个回答

1

你可以使用 /^([0-2]?\d{0,2}\.){3}([0-2]?\d{0,2})$/ 来匹配IPv4地址,使用 /^([\da-fA-F]{1,4}:){7}([\da-fA-F]{1,4})$/i 来匹配IPv6地址。

这两者可以结合成 /^((([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。你可以在 这里 找到一个示例。

3

你的正则表达式只包含两个捕获组(就是括号),所以它没有保存整个地址(第一个组的内容会被覆盖掉)。你可以试试这些:

# 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})"

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})"
13
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'
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()),

把这段代码放到你的 Django 路由定义文件里,也就是 urls.py 文件。

撰写回答