我想检测此字符串:
C:\wamp\www
这是我的功能:
function remove_path($line) {
if (preg_match("/^C:\wamp\www$/", $line)) {
$new_line = str_replace("C:\wamp\www","",$line);
echo "FOUND";
//return $new_line;
} else {
//return $line;
echo " NOT FOUND";
}
}
$line = "C:\wamp\www\project";
remove_path($line);
但似乎模式不起作用, 有什么问题?
答案 0 :(得分:1)
你需要逃避反斜杠,让它们成为字面反斜杠。否则PHP认为它们是转义字符:
if (preg_match("/^C:\\wamp\\www$/", $line)) {
答案 1 :(得分:1)
如果您要搜索常量模式,请使用strpos()
:
if(strpos($string, 'C:\wamp\www\') === 0) {
// do it
}
另请注意,我最后添加了一个\。如果您错过了,该模式也会匹配C:\wamp\www2
答案 2 :(得分:1)
您的字符串未被转义,然后您应该知道内部可能使用的令牌。为此目的有一个令牌\Q..\E
。使用它作为你的正则表达式:
/^\QC:\wamp\www\E$/
答案 3 :(得分:0)
\ w在正则表达式中有特殊含义,它与类字符等效[a-zA-Z0-9]
因此,您需要将其作为\\w
进行转义,但PHP会将\\
解释为\
并再次使用\w
,因此您确实需要将它们转义为\\\w
}}:
preg_match("/^C:\\\wamp\\\www$/", $line))