我想让我的正则表达式匹配以下内容:
169.254.0.0-169.254.254.255
有谁可以帮助我如何实现这一目标。
到目前为止,我有这个:169\.254\.([1-9]{1,2}|[1-9]{1,2}[1-4])
但它也会选择169.254.255.1,这不应该是其中一个匹配。
请帮忙!
感谢
答案 0 :(得分:5)
这是我用于一般IP验证的正则表达式:
(([0-9](?!\d)|[1-9][0-9](?!\d)|1[0-9]{2}(?!\d)|2[0-4][0-9](?!\d)|25[0-5](?!\d))[.]?){4}
故障:
1.`[0-9](?!\d)` -> Any Number 0 through 9 (The `(?!\d)` makes sure it only grabs stand alone digits)
2.`|[1-9][0-9](?!\d)` -> Or any number 10-99 (The `(?!\d)` makes sure it only grabs double digit entries)
3.`|1[0-9]{2}` -> Or any number 100-199
4.`|2[0-4][0-9]` -> Or any number 200-249
5.`|25[0-5]` -> Or any number 250-255
6.`[.]?` -> With or without a `.`
7.`{4}` -> Lines 1-6 exactly 4 times
这还没有让我的IP地址验证失败。
对于您的具体情况,应该这样做:
(169\.254\.)((([0-9](?!\d)|[1-9][0-9](?!\d)|1[0-9]{2}|2[0-4][0-9]|25[0-4])[.])(([0-9](?!\d)|[1-9][0-9](?!\d)|1[0-9]{2}|2[0-4][0-9]|25[0-5])))
这很长,因为我无法弄清楚如何在没有让169.254.255.1失败的情况下检查169.254。(0-254).255
编辑:由于评论而修复
答案 1 :(得分:2)
正则表达式([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])
匹配0-254。
请参阅this page了解更多讨论
答案 2 :(得分:1)
我写过一篇文章,为通用URI的所有组件提供正则表达式(如RFC3986: Uniform Resource Identifier (URI): Generic Syntax中所定义)
请参阅:Regular Expression URI Validation
通用URI的一个组件是IPv4地址。以下是该文章中的自由间距模式Python版本:
re_python_rfc3986_IPv4address = re.compile(r""" ^
# RFC-3986 URI component: IPv4address
(?: (?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?) \.){3} # (dec-octet "."){3}
(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?) # dec-octet "."
$ """, re.VERBOSE)
未评论的JavaScript版本:
var re_js_rfc3986_IPv4address = /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;