2

我正在尝试让我的正则表达式匹配以下内容:

169.254.0.0-169.254.254.255

谁能帮助我如何实现这一目标。

到目前为止,我有这个:

169\.254\.([1-9]{1,2}|[1-9]{1,2}[1-4])

但它也会选择 169.254.255.1,这不应该是匹配项之一。

请帮忙!

谢谢

4

3 回答 3

6

这是我用于一般 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

编辑:由于评论而修复

于 2012-10-31T20:06:08.150 回答
2

正则表达式([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])匹配 0-254。

有关更多讨论,请参见此页面

于 2012-10-31T19:21:11.373 回答
1

我写了一篇文章,为通用 URI 的所有组件提供正则表达式(如 RFC3986 中所定义:统一资源标识符(URI):通用语法

请参阅:正则表达式 URI 验证

通用 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]?)$/;
于 2012-10-31T22:24:33.720 回答