【问题标题】:Make regular expression not match empty string?使正则表达式不匹配空字符串?
【发布时间】:2013-10-27 16:57:13
【问题描述】:

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

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

我自己对正则表达式的表述了解不多,这就是我问的原因。我一直在寻找答案,但找不到直接的答案。我最接近的是:regular expression for anything but an empty string in c#,但这对我来说真的不起作用..

【问题讨论】:

    标签: regex


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      有很多模式类型可以匹配空字符串。 OP 正则表达式属于^.*$ 类型,很容易修改它以防止空字符串匹配,方法是用+ (= {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(即matchesnorthsoutheastwestnortheastnorthwestsoutheastsouthwest) 987654333@:后面加(?<!\w)使首字边界只匹配字首,后面加(?!\w)让尾字边界只匹配字尾。

      \b(?:north|south)?(?:east|west)?\b \b(?<!\w)(?:north|south)?(?:east|west)?\b(?!\w)

      【讨论】:

        【解决方案3】:

        您可以使用+{min, max} 语法:

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

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

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

        【讨论】:

          【解决方案4】:

          显然您需要将 Replace * 替换为 +,因为 + 匹配 1 个或多个字符。但是,在字符类中,您不会做所有逃避您正在做的事情。您的正则表达式可以简化为:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2023-03-13
            • 1970-01-01
            • 1970-01-01
            • 2014-04-16
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-06-05
            相关资源
            最近更新 更多