Php 这些符号/部件在preg_match中的含义是什么?
我对Php 这些符号/部件在preg_match中的含义是什么?,php,preg-match,Php,Preg Match,我对preg_match略知一二,但是有些看起来相当复杂,有些包含我不完全理解的符号。例如: 关于第一个-我只能假设这与电子邮件地址和url有关,但是像[^/]和这样的东西意味着什么 preg_match('@^(?:http://)?([^/]+)@i', $variable); preg_match("/^[A-Z]{5}[0-9]{4}[A-Z]{1}$/", $variable); 在第二个-像^、{5}和$这样的东西是什么意思 preg_match('@^(?:http://)?
preg_match
略知一二,但是有些看起来相当复杂,有些包含我不完全理解的符号。例如:
关于第一个-我只能假设这与电子邮件地址和url有关,但是像[^/]
和这样的东西意味着什么
preg_match('@^(?:http://)?([^/]+)@i', $variable);
preg_match("/^[A-Z]{5}[0-9]{4}[A-Z]{1}$/", $variable);
在第二个-像^
、{5}
和$
这样的东西是什么意思
preg_match('@^(?:http://)?([^/]+)@i', $variable);
preg_match("/^[A-Z]{5}[0-9]{4}[A-Z]{1}$/", $variable);
只是这些小事情我不能完全确定,如果能简单解释一下,我将不胜感激 虽然我不喜欢只发布链接,但我觉得正则表达式教程太多了。所以,看看这个,如果你已经对它的作用有了一点了解,它可能会让你走上正轨
此外,还可以查看一些解释和更有用的链接 以下是直接的答案。我把它们写得很短,因为如果不理解正则表达式,它们就没有意义。这种理解最好是在工作中获得的。我建议您也尝试一下这里列出的regex助手工具,它们允许您进行实验-在编辑模式时查看实时捕获/匹配,非常有用
围绕某个对象的简单括号()使其成为一个组。这里有(?=)这是一个断言,特别是一个积极的前瞻断言。它所做的只是从当前光标在干草堆中的位置向前看,检查里面的东西是否确实存在。还和我在一起吗?
示例:foo(?=bar)仅当后跟bar时才与foo匹配。永远不匹配条,只返回foo
考虑到这一点,让我们分析一下您的正则表达式:
/^.*(?=.{4,})(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z]).*$/
Reads as:
^.* From Start, capture 0-many of any character
(?=.{4,}) if there are at least 4 of anything following this
(?=.*[0-9]) if there is: 0-many of any, ending with an integer following
(?=.*[a-z]) if there is: 0-many of any, ending with a lowercase letter following
(?=.*[A-Z]) if there is: 0-many of any, ending with an uppercase letter following
.*$ 0-many of anything preceding the End
第一个:
@
实际上与匹配的内容无关。通常,在正则表达式中使用/
作为分隔符。缺点是,每当你想使用它时,你都需要逃避它。所以这里,@
用作分隔符
[^/]
是一个字符组[/]
将只匹配/
字符,^
将其反转<代码>[^/]
匹配除/
之外的所有字符
第二个:
^
匹配字符串的开头,$
匹配字符串的结尾。您可以使用它强制正则表达式必须应用于匹配的整个字符串
{5}
是一个量词。它相当于{5,5}
,最小5个,最大5个,因此它正好匹配5个字符。第一个:
[^/]
=除斜杠外的所有内容
第二个:
^
从$variable开头查看
{5}
正好出现5次[A-Z]
$
查看,直到到达$variable的末尾
^和$
的组合意味着这两者之间的所有内容都必须应用于$variable