Preg_match php解释

时间:2014-02-26 13:50:00

标签: php regex

我对下面preg_match语法中的一个字符有疑问。 我只想完全理解。 \w寻找字母数字字符和下划线。

我的问题是\\w之后和@之前的含义是什么意思?

这是否意味着它允许:

  1. 任何字母数字
  2. 任何反斜杠
  3. 任何破折号
  4. 或者这个反斜杠是否意味着挑出后面的角色?

    当我在w3schools.com示例中测试时,我可以在电子邮件地址中使用反斜杠验证,但是当它们被回显时它们会被删除。

    $email = test_input($_POST["email"]);
        // check if e-mail address syntax is valid
        if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email))
          {
          $emailErr = "Invalid email format"; 
          }
    

1 个答案:

答案 0 :(得分:1)

反斜杠用于转义在正则表达式中具有特殊含义的字符以获取文字字符。必须转义十二个字符:[ { ( ) . ? * + | \ ^ $

如果我想在模式中写一个文字$,我必须写\$

注意:如果情况不明确(使用量词{{m,n}

,则无需转义{m}

注2:模式的分隔符也必须在字符类的内部和外部进行转义。

在角色类中,这十二个角色不再需要被转义,因为它们失去了它们的特殊含义并被视为文字。但是,如果三个字符在字符类中处于特殊位置,则它们具有特殊含义。这些字符为:^ - ]

第一个位置的

^用于否定一个字符类([^M] => 所有不是M )。如果你想在“第一个位置”使用它作为文字字符,你必须写:[\^]

两个字符之间的

-定义了一个字符范围([a-z])。这意味着你不需要在开始时(或者在^之后立即)或在课程结束时逃避它。您只需要在两个字符之间转义它。在所有这些例子中,-被视为文字(并没有定义范围):

[-abcd]
[^-abcd]
[abcd-]
[ab\-cd]
[\s-abcd]   # because \s is not a character

]因为它用于关闭字符类必须进行转义,除非在第一个位置或在^之后立即转义。 []][^]]是正确的。

如果我写的模式没有不必要的反斜杠,我会得到:

/([\w-]+@[\w-]+\.[\w-]+)/

回答你的问题(“这意味着什么?”):正则表达式引擎忽略了无法解除的转义。