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

2q5ifsrm  于 12个月前  发布在  其他
关注(0)|答案(4)|浏览(112)

我有正则表达式,它在我的应用程序中工作得很好,但它也匹配一个空字符串,即。当输入为空时不发生错误。如何修改这个正则表达式使它不匹配空字符串?注意,我不想改变这个正则表达式的任何其他功能。
这是我使用的正则表达式:^([0-9\(\)\/\+ \-]*)$
我自己对正则表达式不太了解,这就是我问的原因。我一直在寻找答案,但找不到直接的答案。最接近的是这个:regular expression for anything but an empty string in c#,但这并不真正为我工作..

xytpbqjk

xytpbqjk1#

*替换为+,因为*表示“0次或多次发生”,而+表示“至少发生一次”

krcsximq

krcsximq2#

有很多模式类型可以匹配空字符串。OP正则表达式属于^.*$类型,很容易修改它以防止空字符串匹配,方法是将*(= {0,})量词(表示 * 零或多 *)替换为+(= {1,})量词(表示 * 一个或多个 *),正如在本文中已经提到的那样。
还有其他模式类型匹配空字符串,如何防止 them 匹配空字符串并不总是显而易见的。
以下是其中一些模式的解决方案:
[^"\\]*(?:\\.[^"\\]*)* * (?:[^"\\]|\\.)+
abc||def * abc|def(删除额外的|交替运算符)
^a*$字符串^a+$+匹配1个或多个字符)
^(a)?(b)?(c)?$^(?!$)(a)?(b)?(c?)$(?!$)(如果字符串的结尾位于字符串的开头,则(?!$)负向前查找会失败)
或 * ^(?=.)(a)?(b)?(c?)$(?=.)正向预测需要至少一个字符,.可能匹配或不匹配换行符,这取决于修饰符/正则表达式的风格)
^$|^abc$^abc$^abc$(删除^$替代选项,该选项允许正则表达式匹配空字符串)
^(?:abc|def)?$**^(?:abc|def)$(删除使(?:abc|def)组可选的?量词)
要使\b(?:north|south)?(?:east|west)?\b(即matchesnorthsoutheastwestnortheastnorthwestsoutheastsouthwest),单词边界must be precised:通过在其后面添加(?<!\w),使初始字边界仅匹配字的开头,并且通过在其后面添加(?!\w),使尾部字边界仅匹配字的结尾。
\b(?:north|south)?(?:east|west)?\b * \b(?<!\w)(?:north|south)?(?:east|west)?\b(?!\w)

o4tp2gmn

o4tp2gmn3#

您可以使用+{min, max}扩展:

^[0-9\(\)\/\+ \-]{1,}$

^[0-9\(\)\/\+ \-]+$

顺便说一下:这是学习正则表达式的一个很好的来源(而且很有趣):http://regexone.com/

k3bvogb1

k3bvogb14#

显然,您需要将Replace *替换为+,因为+匹配一个或多个字符。但是在字符类中,你不需要做所有的转义操作.正则表达式可以简化为:

^([0-9()\/+ -]+)$

相关问题