使正则表达式与空字符串不匹配?

时间:2013-10-27 16:57:13

标签: regex

我有正则表达式在我的应用程序中工作正常,但它也匹配一个空字符串,即输入为空时不会发生错误。如何修改此正则表达式以使其与空字符串不匹配?请注意,我不想更改此正则表达式的任何其他功能。

这是我正在使用的正则表达式:^([0-9\(\)\/\+ \-]*)$

我自己对正则表达式的了解并不多,这就是我要问的原因。我已经找到了答案,但找不到直接答案。我最接近的是:regular expression for anything but an empty string in c#,但这对我来说并不适用..

4 个答案:

答案 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*$ ^a+$+匹配1个或多个字符)

     

^(a)?(b)?(c)?$ ^(?!$)(a)?(b)?(c?)$(如果字符串的结尾位于字符串的开头,则(?!$)否定前瞻会使匹配失败)   
^(?=.)(a)?(b)?(c?)$(?=.)正向前瞻需要至少一个字符,.可能匹配或不匹配换行符,具体取决于修饰符/正则表达的味道)

     

^$|^abc$ ^abc$(删除^$替代方案,使正则表达式匹配空字符串)

     

^(?:abc|def)?$ ^(?:abc|def)$(移除使?组可选的(?:abc|def)量词)