$和*在PCRE(正则表达式)中是什么意思


what does $ and * means in PCRE (Regular Expression)?

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

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

由于现有的答案没有涵盖这一点。。。

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