Php $and*在PCRE(正则表达式)中是什么意思?
我正在使用一个正则表达式来验证电子邮件地址这里是我正在使用的正则表达式Php $and*在PCRE(正则表达式)中是什么意思?,php,regex,pcre,Php,Regex,Pcre,我正在使用一个正则表达式来验证电子邮件地址这里是我正在使用的正则表达式 preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/", $email) 上面的大多数代码都是不言自明的,比如 a) ^不代表 b) 字符串的开头应该是\uua-z 0-9 c) 匹配以点开头的下一个字符 d) 现在*@在这里的意思是什么,难道不就是@吗?这意味着下一个字符应该是@ e) 接下来,它将再次尝试查
preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/", $email)
上面的大多数代码都是不言自明的,比如
a) ^不代表
b) 字符串的开头应该是\uua-z 0-9
c) 匹配以点开头的下一个字符
d) 现在*@在这里的意思是什么,难道不就是@吗?这意味着下一个字符应该是@
e) 接下来,它将再次尝试查找点,第一个点是可选的,第二个点是强制的
f) 美元到底是什么意思?*表示前面的规则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
你的假设a)不正确
^
是本例中字符串的开头。在字符类的开头,它不是
[\u a-z0-9-]+
将匹配[]
中的任何字符一次或多次(因为+
)
(\.[U a-z0-9-]+)*
然后有一个点与之前的图案相同,*
表示该完整部分可以重复0次或更多次
然后必须有字符@
然后,@
之前的零件重复
(\.[a-z]{2,3})$
字符串必须以
和2或3个小写字母结尾(由$
定义),有关regexp的许多信息可以在
例如:f)请参见§Anchor at,因为现有答案没有涵盖这一点
是的,
*
表示“零次或多次”,但默认情况下它也是“贪婪的”,因此它将尽可能多地匹配,即使匹配字符串的一部分会导致模式的下一部分匹配<通过添加?
:*?
,^
在这种情况下不表示“不”,可以将code>*设置为“惰性”(允许模式“回溯”以允许模式中的进一步匹配)。它仅在字符类内部执行此操作(并且仅当它是第一个字符时):[^abc
]`。这里它的意思是“字符串的开始”。而且,这个表达式是错误的。它应该以(\.[a-z]{2,})$/
结尾。否则,您将忽略.areo、.coop、.info、.museum、.name、.local或.localdomain TLD或任何新出现的GTD@托马斯。。。这种模式远远不止于此。虽然我不知道您的开发平台,但“regex buddy”是一款非常棒的软件,可以帮助您理解windows环境下的正则表达式。在这种情况下,^
可能是一行或字符串的开头。对于^
(字符类之外)要严格要求字符串的开头,必须使用s
修饰符(或/s
或(?s)
)。@在这种情况下,是字符串的开头。字符类的开头是a而不是
。m
(多行)修饰符使用该修饰符更改^
的行为,该修饰符会额外匹配行的开头。s
(dotall)修饰符使
匹配新行字符。我将接受更正。我把
上的s
(dotall)影响与^
和$
上的m
(多行)影响混淆了。谢谢你的更正。