这些特定符号/部分在preg_match中意味着什么?

时间:2012-08-30 14:33:42

标签: php preg-match

我对preg_match有点了解,但是有一些看起来相当复杂,有些包含我不完全理解的符号。例如:

在第一个 - 我只能假设这与电子邮件地址和网址有关,但[^/]?等内容有何关系意思?

preg_match('@^(?:http://)?([^/]+)@i', $variable);

.....

在第二个中 - ^{5}$之类的内容是什么意思?

preg_match("/^[A-Z]{5}[0-9]{4}[A-Z]{1}$/", $variable);

这些只是我不完全确定的小事,我们将非常感谢您的简要解释。

4 个答案:

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