我正在使用正则表达式验证电子邮件地址,这是我正在使用的正则表达式。
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)到底是什么意思?
答案 0 :(得分:7)
你的假设a)不是真的
在这种情况下, ^
是字符串的开头。在字符类的开头是一个NOT。
[_a-z0-9-]+
会与[]
中的任何字符匹配一次或多次(因为+
)
(\.[_a-z0-9-]+)*
然后有一个与之前相同的模式点,*
表示这个完整的部分可以重复0次或更多次
然后必须有角色@
然后@
之前的部分重复
(\.[a-z]{2,3})$
字符串必须以$
和2或3个小写字母结束(由.
定义)
答案 1 :(得分: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
答案 2 :(得分:2)
有关正则表达式的大量信息可以在http://www.regular-expression.info
找到 处的锚点答案 3 :(得分:1)
由于现有的答案没有涵盖这个......
是的,*
表示“零次或多次”,但默认情况下它也是“贪婪的”,所以它会尽可能多地匹配,即使匹配的字符串的一部分会导致下一个要匹配的模式的一部分。通过附加*
:?
,*?
可以变得“懒惰”(允许模式“回溯”以允许模式中的进一步匹配)。