我有正则表达式在我的应用程序中工作正常,但它也匹配一个空字符串,即输入为空时不会发生错误.如何修改此正则表达式以使其与空字符串不匹配?请注意,我不想更改此正则表达式的任何其他功能.
这是我正在使用的正则表达式: ^([0-9\(\)\/\+ \-]*)$
我自己对正则表达式的了解并不多,这就是我要问的原因.我已经找到了答案,但找不到直接答案.我最接近的是:正则表达式除了c#中的空字符串之外的任何东西,但这对我来说并不适用..
有很多模式类型可以匹配空字符串。OP 正则表达式属于一种^.*$
类型,很容易通过将*
(= {0,}
) 量词(表示零或多个)替换为+
(= {1,}
) 量词(表示一个或多个)来修改它以防止空字符串匹配,正如已经提到的在这里的帖子中。
还有其他匹配空字符串的模式类型,如何防止它们匹配空字符串并不总是显而易见的。
以下是一些带有解决方案的模式:
[^"\\]*(?:\\.[^"\\]*)*
?(?:[^"\\]|\\.)+
abc||def
?abc|def
(删除额外的|
交替运算符)
^(a)?(b)?(c)?$
?^(?!$)(a)?(b)?(c?)$
((?!$)
如果字符串的结尾在字符串的开头,则负前瞻匹配失败)
或 ?^(?=.)(a)?(b)?(c?)$
((?=.)
正向前瞻至少需要一个字符,.
根据修饰符/正则表达式的风格,可能匹配或不匹配换行符)
^$|^abc$
?^abc$
(删除^$
使正则表达式能够匹配空字符串的替代方法)
^(?:abc|def)?$
?^(?:abc|def)$
(删除?
使(?:abc|def)
组可选的量词)
要使\b(?:north|south)?(?:east|west)?\b
(匹配 north
, south
, east
, west
, northeast
, northwest
, southeast
, southwest
),单词边界必须精确:通过添加使初始单词边界仅匹配单词的开头(?<!\w)
,并让尾随单词边界仅匹配单词末尾(?!\w)
在它之后添加。
\b(?:north|south)?(?:east|west)?\b
?\b(?<!\w)(?:north|south)?(?:east|west)?\b(?!\w)