我在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”验证为无效字符串。
答案 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
..等等。