0

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

关于第一个- 我只能假设这与电子邮件地址和 url 有关,但它是什么[^/]意思?

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

......

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

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

这只是我不完全确定的这些小事情,我们将不胜感激。

4

4 回答 4

4

以下是直接答案。我把它们写得很短,因为如果不了解正则表达式,它们就没有意义。最好在http://www.regular-expressions.info/tools.html获得这种理解。我建议您也尝试那里列出的正则表达式帮助工具,它们允许您进行实验 - 在您编辑模式时查看实时捕获/匹配,非常有帮助。

围绕某事物的简单括号 ( ) 使其成为一个组。在这里,您有 (?=) 这是一个断言,特别是一个积极的前瞻性断言。它所做的只是检查里面的内容是否从大海捞针中的当前光标位置向前移动。还在我这儿?示例: foo(?=bar) 仅当 foo 后跟 bar 时才匹配。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
于 2012-08-30T14:37:40.930 回答
1

虽然我不喜欢只发布链接,但我认为正则表达式教程太多了。所以看看这个正则表达式备忘单,如果你已经对它的作用有了一点了解,它可能会让你上路。

还可以查看这个以获得一些解释和更多有用的链接;http://coding.smashingmagazine.com/2009/06/01/essential-guide-to-regular-expressions-tools-tutorials-and-resources/

于 2012-08-30T14:36:06.277 回答
1

第一:

实际上与匹配的@内容没有任何关系。通常,您/在正则表达式中用作分隔符。缺点是,每次你想使用它时都需要逃避它。所以在这里,@被用作分隔符。

[^/]是一个字符组。[/]将仅匹配/字符,将其^反转。[^/]匹配/.之外的所有字符

第二个:

^匹配字符串的开头,字符串$的结尾。您可以使用它来强制正则表达式必须应用于您匹配的整个字符串。

{5}是一个量词。它等同于{5,5}which is minimum 5, maximum 5,因此它正好匹配 5 个字符。

于 2012-08-30T14:39:24.280 回答
1

第一个: [^/]=一切,但没有斜线

第二个: ^从 $variable 的开头开始查找 {5}[AZ] 的 5 次出现,$直到 $variable 结束

组合^ and $意味着两者之间的所有内容都必须适用于 $variable

于 2012-08-30T14:40:21.470 回答