为了账号安全,请及时绑定邮箱和手机立即绑定

正则表达式将 IP 与 jsonschema 中的掩码匹配

正则表达式将 IP 与 jsonschema 中的掩码匹配

炎炎设计 2021-08-11 19:45:52
这是一个很好的解决方案在这里与面具例如匹配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 文件)中,但似乎包含一些非法内容。不能制定出它是什么,已经看过这个,这个,这个和使用的建议ujson而不是JSON(在python)也尝试过这里,但没有任何作品。包含该正则表达式的以下 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 中运行?
查看完整描述

2 回答

?
RISEBY

TA贡献1856条经验 获得超5个赞

对于 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 地址的所有部分,而不仅仅是完全匹配,那么这里有一个基于此的正则表达式。我已经包含了可选子网掩码的匹配:


^(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]))?$


查看完整回答
反对 回复 2021-08-11
  • 2 回答
  • 0 关注
  • 181 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信