preg_match一个反斜杠

时间:2014-06-23 05:16:48

标签: php regex

$pattern = '/\\\p\\\/';
    if (preg_match($pattern, "\p\")) {
        echo "Correct";
    } else {
        echo "Incorrect";
    }

我不明白第一个\\\ p。 为什么\\ p不起作用?

3 个答案:

答案 0 :(得分:0)

你的模式错了。模式\\p\\匹配字符串\p\。但\\\p\\\与任何内容都不匹配。

DEMO

如果您想匹配字符串\\p\\,您的模式应为\\\\p\\\\

DEMO

答案 1 :(得分:0)

请注意,"\p\"不是有效字符串:

  • 最终\"转义引号,以便字符串不会终止
  • \p匹配文字p字符,这不是您的意图
  • 如果你想在字符串中说\p\,你必须这样写:"\\p\\"

要匹配\p\,请使用:

$regex = '~\\\\p\\\\~';
echo (preg_match($regex,"\\p\\")) ? "Matches" : "Doesn't Match";

请参阅online demo底部的输出。

答案 2 :(得分:0)

这里的问题是字符串正则表达式都使用转义字符,并且它们需要加倍才能实现预期的行为。

因此,在这种情况下,正则表达式中需要四个反斜杠,搜索字符串中需要两个反斜杠:

if (preg_match('/\\\\p\\\\/', '\\p\\')) {
    echo "Hurray!\n";
}

'/\\\p\\\/'之所以有效,是因为\p\/在单引号字符串中没有特殊含义,所以反斜杠是逐字打印的。换句话说,PHP 纠正你的字符串以具有正确的含义;那就是说,你应该使用正确数量的转义字符。

顺便说一句,"\\p\"是完全错误的,会导致解析错误;我会假设这是一个错字。