$pattern = '/\\\p\\\/';
if (preg_match($pattern, "\p\")) {
echo "Correct";
} else {
echo "Incorrect";
}
我不明白第一个\\\ p。 为什么\\ p不起作用?
答案 0 :(得分:0)
答案 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\"
是完全错误的,会导致解析错误;我会假设这是一个错字。