如果字符串中的任何子字符串包含所需的正则表达式

时间:2018-02-18 11:42:41

标签: 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匹配正则表达式。

2 个答案:

答案 0 :(得分:0)

在正则表达式中,\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]+

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

答案 1 :(得分:0)

您可以使用[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个或多个字符。例如:com在abcd@gmail.com