我有正则表达式,它在我的应用程序中工作得很好,但它也匹配一个空字符串,即。当输入为空时不发生错误。如何修改这个正则表达式使它不匹配空字符串?注意,我不想改变这个正则表达式的任何其他功能。
这是我使用的正则表达式:^([0-9\(\)\/\+ \-]*)$
我自己对正则表达式不太了解,这就是我问的原因。我一直在寻找答案,但找不到直接的答案。最接近的是这个:regular expression for anything but an empty string in c#,但这并不真正为我工作..
我有正则表达式,它在我的应用程序中工作得很好,但它也匹配一个空字符串,即。当输入为空时不发生错误。如何修改这个正则表达式使它不匹配空字符串?注意,我不想改变这个正则表达式的任何其他功能。
这是我使用的正则表达式:^([0-9\(\)\/\+ \-]*)$
我自己对正则表达式不太了解,这就是我问的原因。我一直在寻找答案,但找不到直接的答案。最接近的是这个:regular expression for anything but an empty string in c#,但这并不真正为我工作..
4条答案
按热度按时间xytpbqjk1#
将
*
替换为+
,因为*
表示“0次或多次发生”,而+
表示“至少发生一次”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
(即matchesnorth
,south
,east
,west
,northeast
,northwest
,southeast
,southwest
),单词边界must be precised:通过在其后面添加(?<!\w)
,使初始字边界仅匹配字的开头,并且通过在其后面添加(?!\w)
,使尾部字边界仅匹配字的结尾。\b(?:north|south)?(?:east|west)?\b
*\b(?<!\w)(?:north|south)?(?:east|west)?\b(?!\w)
o4tp2gmn3#
您可以使用
+
或{min, max}
扩展:或
顺便说一下:这是学习正则表达式的一个很好的来源(而且很有趣):http://regexone.com/
k3bvogb14#
显然,您需要将Replace
*
替换为+
,因为+
匹配一个或多个字符。但是在字符类中,你不需要做所有的转义操作.正则表达式可以简化为: