【问题标题】:Regular Expression too general正则表达式太笼统
【发布时间】:2013-11-06 18:40:15
【问题描述】:

我有正则表达式:

"(al|sf|sa|sc|nrc|nrc form|doe|doe f|lsi|doe form psd f|doe al f)?[\\s\\-\\.]*[\\d]{3,6}[\\s\\-\\.]*[\\w]{1,4}"

我不希望纯数字字符串(例如“2001”)通过此测试,但“2001”正在通过此正则表达式。为什么?我该如何解决这个问题?

【问题讨论】:

  • 第一组必须是可选的吗?

标签: java regex string matcher


【解决方案1】:

?* 部分是可选的,因此正则表达式中唯一需要的部分是

\d{3,6}\w{1,4}

\w 包含数字,所以它通过了,因为 2001 是 3 个\d 和 1 个\w

【讨论】:

    【解决方案2】:

    您可以像这样添加负前瞻:

    (?!^\\d+$)
    

    【讨论】:

      猜你喜欢
      • 2014-10-12
      • 1970-01-01
      • 1970-01-01
      • 2010-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-31
      相关资源
      最近更新 更多