2014-06-23 63 views
0
$pattern = '/\\\p\\\/'; 
    if (preg_match($pattern, "\p\")) { 
     echo "Correct"; 
    } else { 
     echo "Incorrect"; 
    } 

我不明白第一個\\\ p。 爲什麼\\ p不起作用?preg_match a back slash

+0

您輸入的字符串「\ p \」不正確 – mmonem

+0

該模式應該是「'/ \\\ p \\\\ /'」,搜索字符串應該是''\\ p \\'' 。 –

回答

0

你的模式是錯誤的。模式\\p\\匹配字符串\p\。但\\\p\\\不匹配任何內容。

DEMO

如果你想字符串匹配\\p\\,你的模式應該是\\\\p\\\\

DEMO

0

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

  • 最後\"逃脫的報價,所以該字符串未終止
  • \p文字p字符,匹配其是不是你想要的
  • 如果你想在一個字符串中說\p\,你必須寫它像t他:"\\p\\"

要匹配\p\,用途:

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

看到輸出在online demo的底部。

0

這裏的問題是,字符串正則表達式使用轉義字符,他們需要加倍以實現預期的行爲。

因此,在這種情況下,你需要在正則表達式四個反斜槓,其中兩個在搜索字符串:

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

之所以'/\\\p\\\/'的作品,是因爲\p\/在一個沒有特殊含義帶引號的字符串,所以反斜槓逐字打印。換句話說,PHP 糾正了你的字符串有正確的含義;那就是說,你應該使用正確數量的轉義字符。

btw,"\\p\"只是錯誤的,會導致解析錯誤;我會假設這是一個錯字。