正则表达式或空字符串不起作用

时间:2016-04-22 14:37:44

标签: regex xml xsd xsd-validation

我正在尝试通过xml验证xsd。 其中一个字段是可选字段,可以包含值或不包含值。就我而言,是计算机的IP。 我正在检查常规表达式xsd以检查它是否具有IP格式,但是当它变为空时无法验证。

以下是example

验证我使用以下正则表达式的IP:

((([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]))|($)

如您所见,我尝试使用(IP表达式的正则表达式)| ($) 但它不适用于空字符串。

我做错了什么?我该如何解决? 谢谢大家

1 个答案:

答案 0 :(得分:1)

你的正则表达式中有一个错误 - 未转义的.匹配任何字符。您可以将其转义或放入字符类,例如[.]以便它只能匹配文字句点(点)。要匹配空字符串,只需在末尾添加?量词:

((([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])[.]){3}([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]))?
                                               ^^^ (dot inside a char class)                        ^ - The whole pattern can match 1 or 0 times

请参阅regex demo

要匹配空白行,您还需要添加备选方案:

(\s*|((([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])[.]){3}([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])))
 ^^^^

请参阅another regex demo