1

我正在使用验证电子邮件地址的正则表达式,这是我正在使用的正则表达式。

preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/", $email)

上面的大部分代码都是不言自明的

a) ^ 表示非。

b)字符串的开头应该是 _ a-z 0-9

c) 匹配下一个以点开头的字符

d) 现在 *@ 在这里是什么意思,难道只是 @ 意味着下一个字符应该是 @

e) 接下来它会再次尝试查找点,第一个点是可选的,第二个是强制性的。

f) 到底 $ 是什么意思?

4

4 回答 4

7

您的假设 a) 不正确

^在这种情况下是字符串的开头。在字符类的开头它是一个 NOT。

[_a-z0-9-]+将匹配任何字符[]一次或多次(因为+

(\.[_a-z0-9-]+)*然后有一个点与以前的模式相同,这*意味着这个完整的部分可以重复 0 次或更多次

然后必须有性格@

然后是@重复之前的部分

(\.[a-z]{2,3})$字符串必须以$a.和 2 或 3 个小写字母结尾(由 定义)

于 2011-06-07T05:49:49.923 回答
2

* 表示前面的规则 0 次或多次

而在这种情况下 $ 表示字符串的结尾

(\.[_a-z0-9-]+)* // these characters can appear 0 or multiple times

(\.[a-z]{2,3})$ // the string ends with 2 letters in lowercase alphabet
于 2011-06-07T05:46:28.397 回答
2

很多关于正则表达式的信息可以在http://www.regular-expression.info找到

例如: f) 参见http://www.regular-expressions.info/quickstart.html的 § 锚

于 2011-06-07T06:00:47.887 回答
1

由于现有的答案没有涵盖这个......

是的,*意思是“零次或多次”,但它默认也是“贪婪”的,所以它会尽可能多地匹配,即使部分匹配的字符串会导致模式的下一部分匹配。通过附加:*可以使“惰性”(允许模式“回溯”以允许模式中的进一步匹配)。?*?

于 2011-06-07T06:02:58.507 回答