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

regex or empty string not working

我正在尝试通过 xsd 验证 xml。 其中一个字段是一个可选字段,可以包含值或不包含值。就我而言,是计算机的 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 表达式的正则表达式)| ($) 但它不适用于空字符串。

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

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

((([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