关于RegEx重复的具体问题

时间:2010-01-06 09:43:30

标签: regex

我不是RegEx专家所以我使用以下借用的RegEx来验证电子邮件地址:

^[\w\.=-]+@[\w\.-]+\.[\w]{2,3}$

用户已报告拒绝其电子邮件地址frank@brownlie.info。这是因为“inf”被拒绝而被拒绝的“信息”。所以我做了一些阅读并学习了[\ w] {2,3}语法意味着什么,是的,这就是为什么信息被拒绝,因为它是四个字符。将其更改为[\ w] {2,4}。

我喜欢理解我所遇到的问题。我的问题是为什么\ w在方括号内?不会\ w {2,4}也有用吗?

干杯,罗布。

3 个答案:

答案 0 :(得分:4)

[\w]中的外部字符类不必作为\w已经表示字符类。只有当你想要组合字符或预定义的字符类时,才需要[…]中的字符类符号[\w\s](字符和空白字符)或[\w-](字符和连字符) 。因此[\w]等于\w

答案 1 :(得分:0)

您可以在方括号中定义字符集。例如,第一个方括号部分表示“任何字母数字字符AND点和等号和短划线”。然后告诉解析器以下“+”,该集合中的任何字符至少应存在一次。

在最后一部分,因为你只使用\ w并且它本身就意味着“所有字母数字字符”,所以你不需要任何方括号。量词(+,?,*,{n,m})仅影响前一个字符OR字符集(应该用我所解释的方括号定义)。是的,“\ w”在解析RegExp时被视为单个字符。

答案 2 :(得分:0)

惠斯特都可以工作,它通常更好的风格/更易读的组,因为它清楚地表明了重复的内容。

我实际上会更明确地删除一些常见的,有效但不太可能的情况(请注意,如果您允许所有技术上有效的电子邮件地址,那么几乎任何事情都会发生。)< / p>

^[\w\.=-]+@([\w\d-]+\.){1,3}[a-zA-Z]{2,4}$