我有正则表达式在我的应用程序中工作正常,但它也匹配一个空字符串,即输入为空时不会发生错误。如何修改此正则表达式以使其与空字符串不匹配?请注意,我不想更改此正则表达式的任何其他功能。
这是我正在使用的正则表达式:^([0-9\(\)\/\+ \-]*)$
我自己对正则表达式的了解并不多,这就是我要问的原因。我已经找到了答案,但找不到直接答案。我最接近的是:regular expression for anything but an empty string in c#,但这对我来说并不适用..
答案 0 :(得分:11)
替换" *"使用" +",as" *"表示" 0次或更多次出现",而" +"意味着"至少发生一次"
答案 1 :(得分:1)
您可以使用+
或{min, max}
语法:
^[0-9\(\)\/\+ \-]{1,}$
或
^[0-9\(\)\/\+ \-]+$
顺便说一句:这是学习正则表达式的一个很好的来源(而且很有趣):http://regexone.com/
答案 2 :(得分:1)
显然,您需要将*
替换为+
,因为+
匹配1个或多个字符。但是在角色类中,你不要做所有逃避你正在做的事情。你的正则表达式可以简化为:
^([0-9()\/+ -]+)$
答案 3 :(得分:1)
有很多模式类型可以匹配空字符串。 OP正则表达式属于^.*$
类型,通过替换*
(= {0,}
)量词(意味着零或更多<),可以很容易地修改它以防止空字符串匹配/ em>)使用+
(= {1,}
)量词(意思是一个或多个),正如此处帖子中已经提到的那样。
还有其他模式类型与空字符串匹配,并且如何防止他们匹配空字符串并不总是很明显。
以下是一些具有解决方案的模式:
[^"\\]*(?:\\.[^"\\]*)*
⇒(?:[^"\\]|\\.)+
abc||def
⇒abc|def
(删除额外的|
轮换操作员)
^(a)?(b)?(c)?$
⇒^(?!$)(a)?(b)?(c?)$
(如果字符串的结尾位于字符串的开头,则(?!$)
否定前瞻会使匹配失败)
或⇒^(?=.)(a)?(b)?(c?)$
((?=.)
正向前瞻需要至少一个字符,.
可能匹配或不匹配换行符,具体取决于修饰符/正则表达的味道)
^$|^abc$
⇒^abc$
(删除^$
替代方案,使正则表达式匹配空字符串)
^(?:abc|def)?$
⇒^(?:abc|def)$
(移除使?
组可选的(?:abc|def)
量词)