我对preg_match
有点了解,但是有一些看起来相当复杂,有些包含我不完全理解的符号。例如:
在第一个 - 我只能假设这与电子邮件地址和网址有关,但[^/]
和?
等内容有何关系意思?
preg_match('@^(?:http://)?([^/]+)@i', $variable);
.....
在第二个中 - ^
,{5}
和$
之类的内容是什么意思?
preg_match("/^[A-Z]{5}[0-9]{4}[A-Z]{1}$/", $variable);
这些只是我不完全确定的小事,我们将非常感谢您的简要解释。
答案 0 :(得分:4)
以下是直接答案。我保持简短,因为如果不了解正则表达式就没有意义。这种理解最好在http://www.regular-expressions.info/tools.html获得。我建议你也试试那里列出的正则表达式助手工具,它们允许你进行实验 - 在编辑模式时看到实时捕捉/匹配,非常有帮助。
简单的圆括号()围绕某些东西使它成为一个组。在这里你有(?=)这是一个断言,特别是一个正面的预测断言。它所做的就是检查大海捞针当前光标位置内部实际存在的内部。还在我这儿? 示例:foo(?= bar)仅在后跟bar时匹配foo。 bar永远不会匹配,只返回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
答案 1 :(得分:1)
虽然我不喜欢发布链接,但我认为正则表达式教程太多了。所以看看这个Regular Expression cheat sheet如果你已经对它的作用有所了解,它可能会让你上路。
另外,请查看以获取一些解释和更多有用的链接; http://coding.smashingmagazine.com/2009/06/01/essential-guide-to-regular-expressions-tools-tutorials-and-resources/
答案 2 :(得分:1)
第一个:
@
实际上与匹配的内容没有任何关系。通常,您使用/
作为正则表达式中的分隔符。缺点是,每次你想要使用它时都需要逃避它。所以在这里,@
用作分隔符。
[^/]
是一个角色组。 [/]
只匹配/
个字符,^
会反转此字符。 [^/]
匹配除 /
之外的所有字符。
第二个:
^
匹配字符串的开头,$
字符串的结尾。您可以使用它来强制正则表达式必须应用于您匹配的整个字符串。
{5}
是量词。它相当于{5,5}
minimum 5, maximum 5
,因此它恰好匹配5个字符。
答案 3 :(得分:1)
第一个:
[^/]
=一切但没有斜线
第二个:
{$ 1}}从$ variable的开头看
^
恰好有5个[A-Z]出现
{5}
查看$ variable到达的结尾
$
的组合意味着它之间的所有内容都必须适用于$ variable