【问题标题】:Decyphering a simple regex解密一个简单的正则表达式
【发布时间】:2014-03-22 16:30:42
【问题描述】:

有问题的正则表达式是

(\d{3,4}[.-]?)+

示例文本

707-7019-789

到目前为止我的进步

(            )+  a capturing group, capturing one or more
 \d{3,4}         digit, in quantities 3 or 4
        [.-]?    dot (or something) or hyphen, in quantities zero or one <-- this is the part I'm interested in

据我了解,这应该匹配 3 或 4 位数字,后跟一个点(或任何东西,因为点匹配任何东西)或连字符,捆绑在一个组中,一次或多次。为什么这不匹配

707+123-4567

然后呢?

【问题讨论】:

  • . 匹配[] 之外的任何内容 - 在[] 内部,它只是一个点。
  • 当您使用 .在 [] 中,它将仅匹配点。 [] 去掉特殊含义。因此,在您的情况下,您将仅匹配 3 或 4 位数字,后跟 .或 - 或空字符串,该组应重复一次或多次

标签: regex


【解决方案1】:

字符组[]中的.只是一个文字.,它没有“任何东西”的特殊含义。 [.-]? 表示“一个点或一个连字符或什么都没有”,因为整个组是可选的 ?

【讨论】:

【解决方案2】:
[.-]?

字面意思是什么:

字符类[.-]

  • 只匹配以下字符中的一个.-

惰性量词?

  • 将最后一个标记重复 0 到 1 次,尽可能少

【讨论】:

    【解决方案3】:

    括号删除点的功能。 括号表示“范围”/“字符类”。 因此,您说的是从列表/范围/字符类中选择.- 您不是说从列表中选择“任何东西”-(任何东西都是 . 的常规含义。)

    【讨论】:

    • 我现在明白了。也许更好地将“范围”重新表述为“从 [.-] 的集合中,所以它是一个或另一个”。
    猜你喜欢
    • 2013-10-22
    • 1970-01-01
    • 2016-10-11
    • 1970-01-01
    • 2011-02-28
    • 1970-01-01
    • 1970-01-01
    • 2011-04-11
    相关资源
    最近更新 更多