2014-02-26 89 views
1

我有一个关于preg_match语法中的一个字符的问题。 我只是想完全理解。 \w寻找字母数字字符和下划线。Preg_match php解释

我的问题是\\w@之前的含义是什么?

这是否意味着,它将使:

  1. 任何字母数字
  2. 任何反斜线
  3. 任何破折号

,或者这是反斜线意味着挑出下面的性格吗?

当我在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"; 
     } 
+0

我不认为你真的需要反斜杠那里。它通常用于逃避后面的字符。 – putvande

+0

\有逃避字符串。 http://www.php.net/manual/en/regexp.reference.escape.php。你也可以阅读这个:http://stackoverflow.com/questions/3115150/how-to-escape-regular-expression-special-characters-using-javascript –

+0

谢谢下面的链接解释到底我需要知道逃脱序列¶ 反斜线字符有几个用途。首先,如果它后面跟着一个非字母数字字符,它将带走字符可能具有的任何特殊含义。 – Torads

回答

1

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

如果我想写的图案文字$,我必须写\$

注意:你不需要逃避{如果情况没有暧昧(量词{m,n}{m}

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

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

^在所述第一位置用于否定字符类([^M] =>所有不在A M)。如果要在“第一个位置”将其用作文字字符,则必须写入:[\^]

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

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

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

如果我写,而不uneeded反斜杠的模式,我得到:

/([\w-][email protected][\w-]+\.[\w-]+)/ 

要回答你的问题(“这是什么意思?”):没什么,uneeded逃逸由正则表达式引擎忽略。