我正在使用一个验证电子邮件地址的正则表达式,这里是我正在使用的正则表达式。
preg_match("/^[_a-z0-9-]+('.[_a-z0-9-]+)*@[a-z0-9-]+('.[a-z0-9-]+)*('.[a-z]{2,3})$/", $email)
上面的大多数代码都像一样不言自明
a) ^表示NOT。
b) 字符串的开头应该是_ a-z 0-9
c) 匹配以点开头的下一个字符
d) 现在*@在这里是什么意思,难道不是仅仅是@吗?这意味着下一个字符应该是@
e) 接下来,它将再次尝试查找点,第一个点是可选的,第二个点是必需的。
f) 最后,$是什么意思?
您的假设a)不是真的
在这种情况下,^
是字符串的开头。在一个字符类的开头,它是一个NOT。
[_a-z0-9-]+
将与[]
中的任何字符匹配一次或多次(因为+
)
('.[_a-z0-9-]+)*
则有一个与以前相同图案的点,*
意味着该完整部分可以重复0次或更多次
然后必须有字符@
然后@
之前的部分重复
('.[a-z]{2,3})$
字符串必须以.
和2或3个小写字母结束(由$
定义)
*表示前面的规则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
关于regexp的许多信息可以在http://www.regular-expression.info
例如:f)参见§Anchor athttp://www.regular-expressions.info/quickstart.html
由于现有的答案没有涵盖这一点。。。
是的,*
的意思是"零次或多次",但默认情况下它也是"贪婪的",因此它将尽可能多地匹配,即使匹配字符串的一部分会导致模式的下一部分匹配。可以通过附加?
:*?
来使*
"惰性"(允许模式"回溯"以允许模式中的进一步匹配)。