带转义字符的preg_match()无效

时间:2014-08-07 15:30:40

标签: php regex preg-match

我想检测此字符串:

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);

但似乎模式不起作用, 有什么问题?

4 个答案:

答案 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))