【问题标题】:If any substring in a string contains the required regex如果字符串中的任何子字符串包含所需的正则表达式
【发布时间】:2018-07-28 19:23:39
【问题描述】:

mailto:abcd@gmail.com 不会匹配电子邮件正则表达式。 /\A[\w+-.]+@[a-z\d-]+(.[a-z\d-]+)*.[a-z]+\z/i 我想检查给定字符串中的任何子字符串是否与正则表达式匹配。 在这种情况下,abcd@gmail.com 匹配正则表达式。

【问题讨论】:

    标签: ruby regex ruby-on-rails-3 substring


    【解决方案1】:

    在正则表达式中,\A 表示“字符串的开头”,\z 表示“字符串的结尾”。因此,您的模式被锚定为仅匹配 整个 字符串。

    "mailto:abcd...." 包含 : 字符,这是您的正则表达式模式所不允许的。因此字符串不匹配。

    如果您删除这些锚点,您会得到预期的结果:

    "mailto:abcd@gmail.com".match(/[\w+-.]+@[a-z\d-]+(.[a-z\d-]+)*.[a-z]+/i)
      #=> #<MatchData "abcd@gmail.com" 1:".c">
    

    另一方面,您的电子邮件正则表达式非常混乱!尤其是这部分:

    [a-z\d-]+(.[a-z\d-]+)*.[a-z]+
    

    这是什么意思?它可能并不意味着你认为它的意思......如果你能在这里解释一下意图,我将能够提供更准确的模式匹配。

    【讨论】:

      【解决方案2】:

      您可以使用[A-Za-z0-9_.]+@[A-Za-z0-9]+.[a-z]+ 来检查字符串是否包含电子邮件地址。

      [A-Za-z0-9_.]+匹配1个或多个字符/数字/点(.)/下划线(_)

      @ 匹配电子邮件地址中的@

      [A-Za-z0-9]+ 匹配域名。例如:abcd@gmail.com 中的 gmail

      . 匹配 .

      [a-z]+ 匹配 1 个或多个字符。例如:abcd@gmail.com 中的 com

      【讨论】:

        猜你喜欢
        • 2011-07-22
        • 2021-06-23
        • 2014-03-23
        • 1970-01-01
        • 2011-06-27
        • 1970-01-01
        • 1970-01-01
        • 2010-12-30
        • 1970-01-01
        相关资源
        最近更新 更多