首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正则表达式或空字符串不能工作

问正则表达式或空字符串不能工作
EN

Stack Overflow用户
提问于 2016-04-22 14:37:44
回答 1查看 218关注 0票数 2

我正在尝试通过一个xml验证xsd。其中一个字段是可选字段,它可以包含值或不包含值。在我的例子中,电脑的IP。我正在检查正则表达式xsd,以检查它是否具有IP格式,但当它为空时不能进行验证。

这是示例

为了验证IP,我使用了以下regex:

代码语言:javascript
复制
((([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表达式的正则表达式)\ ($),但它不适用于空字符串。

我做错了什么?我怎么才能修好它?谢谢大家

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-22 14:40:42

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

代码语言:javascript
复制
((([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演示

也要匹配空行,您需要添加另一个选项:

代码语言:javascript
复制
(\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])))
 ^^^^

请参阅另一个regex演示

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36796714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档