gpt4 book ai didi

python - 正则表达式将 IP 与 jsonschema 中的掩码进行匹配

转载 作者:行者123 更新时间:2023-12-01 01:27:38 24 4
gpt4 key购买 nike

有一个很好的解决办法here将 IP 与掩码相匹配,例如 192.168.0.1/24。我添加来自 https://regex101.com/ 的建议转义斜杠,它看起来像这样:

((^|\.)((25[0-5])|(2[0-4]\d)|(1\d\d)|([1-9]?\d))){4}\/(?:\d|[12]\d|3[01])$

这似乎绝对适用于 regex101。

它需要存在于 json 文件(jsonschema 文件)内,但似乎包含非法内容。不知道它是什么,看过 this , this , this并尝试使用 ujson 而不是 json (在 python 中),如建议的 here ,但没有任何效果。

以下 jsonschema 包含该正则表达式:

{
"comment": "ipv4 with a mask",
"data": {
"network": {
}
},
"schema": {
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "ipv4 with a mask",
"type": "object",
"properties": {
"subnet": {
"title": "subnet",
"type": "string",
"pattern": "((^|\.)((25[0-5])|(2[0-4]\d)|(1\d\d)|([1-9]?\d))){4}\/(?:\d|[12]\d|3[01])$"
}
}
}
}

...不幸的是甚至不会解析。 Python 是这样说的:

JSONDecodeError: Invalid \escape: line 16 column 33 (char 380)

我一直在使用这个库fastjsonschema检查这些东西,但甚至无法解析 json 并得到那么远。

有谁知道如何解决这个问题,以某种方式让那段正则表达式在 jsonschema 中运行?

最佳答案

对于 JSON,您需要使用另一个反斜杠转义每个反斜杠 \:

((^|\\.)((25[0-5])|(2[0-4]\\d)|(1\\d\\d)|([1-9]?\\d))){4}\\/(?:\\d|[12]\\d|3[01])$

所以在 JSON 模式中,它看起来像:

"pattern": "((^|\\.)((25[0-5])|(2[0-4]\\d)|(1\\d\\d)|([1-9]?\\d))){4}\\/(?:\\d|[12]\\d|3[01])$"
<小时/>

无论如何,您发现的正则表达式(在链接中)与数字分组不太匹配。尝试使用几个示例 - 完全匹配是正确的,但返回的包含带数字的点或仅包含点。

如果您想要 IP 地址的所有部分而不仅仅是完整匹配,那么这里有一个正则表达式 based on this one 。我已经包含了可选子网掩码的匹配:

^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.
(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.
(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.
(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)
(?:\/(\d|[12]\d|3[01]))?$

(删除我为便于阅读而添加的换行符。)Demo here 。只有前 3 个地址应该匹配,其余的不匹配。

如果您只想要完整的匹配,而不是各个部分,请使用:

^(?:(?: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]?)
(?:\/(?:\d|[12]\d|3[01]))?$

关于python - 正则表达式将 IP 与 jsonschema 中的掩码进行匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53212067/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com