【发布时间】: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
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
在正则表达式中,\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]+
这是什么意思?它可能并不意味着你认为它的意思......如果你能在这里解释一下意图,我将能够提供更准确的模式匹配。
【讨论】:
您可以使用[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
【讨论】: