JSON模式模式验证失败

时间:2017-11-14 05:06:05

标签: regex pattern-matching jsonschema

我在json架构中使用以下模式来验证字符串。

"pattern": "^(nfs://)(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]?):([0-9]{4})"

但目前它没有将“nfs://172.1.1:2049”验证为无效字符串。

1 个答案:

答案 0 :(得分:1)

这似乎不是一个明显的问题,但.字符需要被转义,因为你试图字面上匹配该字符。

这个带有转义.和正斜杠的正则表达式有效:

^(nfs:\/\/)(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]?):([0-9]{4})

问题在于,因为匹配数字的每个捕获组可以匹配少至一个数字或多达三个数字,正则表达式引擎会查看第一个1(在172中),发现它是有效的,然后尝试匹配.(任何字符)并找到数字7,这不是你想要的。

nfs://172.1.1:2049中,正则表达式中的第二个捕获组与IP地址中的第一个1匹配,.7匹配,第三个捕获组与2 ..等等。

在此处试试:https://regex101.com/r/TNXDiQ/1