【问题标题】:regular expression - validate email正则表达式 - 验证电子邮件
【发布时间】:2016-03-08 10:29:29
【问题描述】:

我不明白这一点。希望有人能解释一下。

我正在为客户网站编写用户注册表。

我正在寻找一个正则表达式来验证电子邮件 ID。

我在其中一个网站上找到了这个。下面是表达式-

/^\w+([.-]?\w+)@\w+([.-]?\w+)(.\w{2,3})+$/;

我不明白的是为什么作者在整个表达式中多次使用反斜杠() 转义句点(.),即使分隔符是斜杠(/)。

我的理解是,只有当我们想在表达式中使用分隔符时,我们才必须使用反斜杠转义。

请帮忙理解

【问题讨论】:

标签: pcre


【解决方案1】:

您提到的关于转义分隔符的规则可能基于您正在编写的语言(perl?),因为分隔符 (/) 字符在该语言的上下文中是“特殊的”(或至少在使用该语言的正则表达式模式)。

但是,在正则表达式模式本身的上下文中,有几个特殊字符,其中之一是与任何字符匹配的句点 (.) 字符。因此,如果您想匹配正则表达式中的实际句点,则必须使用反斜杠将其转义,以便正则表达式解析器,而不是语言解析器。

例如,在您提供的模式中,如果最后一个字符分组中的句点没有转义 ((.\w{2,3})+$),正则表达式将匹配任何字符 (.) 后跟 2 或 3 个单词字符 (\w = A-Z、a-z、0-9 或 _) 一次或多次(+ = 上一个组、字符集等的一个或多个)。

因此,如果没有反斜杠,则最后一个字符分组模式匹配“.bc”、“.bcd”和“abcd”。但是,当句点用反斜杠 (\.) 转义时,它会变成文字句点,并且模式不再匹配“abcd”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-14
    • 1970-01-01
    • 1970-01-01
    • 2014-05-11
    • 2011-10-27
    • 2012-09-25
    • 2015-01-15
    相关资源
    最近更新 更多