$和*在PCRE(正则表达式)中意味着什么?

时间:2011-06-07 05:44:52

标签: php regex pcre

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

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)到底是什么意思?

4 个答案:

答案 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

找到

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

处的锚点

答案 3 :(得分:1)

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

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