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

Ahm*_*mad 6 regex

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

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

我自己对正则表达式的了解并不多,这就是我要问的原因.我已经找到了答案,但找不到直接答案.我最接近的是:正则表达式除了c#中的空字符串之外的任何东西,但这对我来说并不适用..

lej*_*lot 12

将"*"替换为"+",因为"*"表示"0次或更多次出现",而"+"表示"至少出现一次"


Wik*_*żew 7

有很多模式类型可以匹配空字符串。OP 正则表达式属于一种^.*$类型,很容易通过将*(= {0,}) 量词(表示零或多个)替换为+(= {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)组可选的量词)

要使\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)