正则表达式 PCRE2 验证 ip 地址范围
Regex PCRE2 verify range of ip address
目前我正在研究用 PCRE2 编写的正则表达式来检查 IP 地址范围
^(10\.).+|(172\.16).+|(192\.168).+
我还需要正则表达式来检查是否可以在字符串中找到 172.16.X.X - 172.31.X.X[= 之间的任何 ip 13=]
当前的正则表达式它正在工作,但没有专门检查这个范围......它正在捕获 172.16.X.X
的所有内容
我试过^(10\.).+|(172\.[16-31]).+|(192\.168).+
,但这种方法行不通。
另外我正在使用 https://regex101.com/ 来调试这个表达式...这是检查它是否正确的好方法吗?
你可以使用
\b(?:(?:192\.168|172(?:\.(?:1[6-9]|2\d|3[01])))(?:\.\d{1,3}){2}|10(?:\.\d{1,3}){3})\b
\b
防止部分单词匹配的单词边界
(?:
非捕获组
(?:
非捕获组
192\.168
匹配192.168
|
或
172(?:\.(?:1[6-9]|2\d|3[01]))
匹配 172.
然后 16 直到 31
)
关闭非捕获组
(?:\.\d{1,3}){2}
匹配2次.
和1-3位
|
或
10(?:\.\d{1,3}){3}
匹配10和3次.
和1-3位
)
关闭非捕获组
\b
一个单词边界
如果你想让\d{1,3}
位更具体,那么你也可以使用:
(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)
目前我正在研究用 PCRE2 编写的正则表达式来检查 IP 地址范围
^(10\.).+|(172\.16).+|(192\.168).+
我还需要正则表达式来检查是否可以在字符串中找到 172.16.X.X - 172.31.X.X[= 之间的任何 ip 13=]
当前的正则表达式它正在工作,但没有专门检查这个范围......它正在捕获 172.16.X.X
的所有内容我试过^(10\.).+|(172\.[16-31]).+|(192\.168).+
,但这种方法行不通。
另外我正在使用 https://regex101.com/ 来调试这个表达式...这是检查它是否正确的好方法吗?
你可以使用
\b(?:(?:192\.168|172(?:\.(?:1[6-9]|2\d|3[01])))(?:\.\d{1,3}){2}|10(?:\.\d{1,3}){3})\b
\b
防止部分单词匹配的单词边界(?:
非捕获组(?:
非捕获组192\.168
匹配192.168|
或172(?:\.(?:1[6-9]|2\d|3[01]))
匹配172.
然后 16 直到 31
)
关闭非捕获组(?:\.\d{1,3}){2}
匹配2次.
和1-3位|
或10(?:\.\d{1,3}){3}
匹配10和3次.
和1-3位
)
关闭非捕获组\b
一个单词边界
如果你想让\d{1,3}
位更具体,那么你也可以使用:
(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)