PHP正則反斜槓的講究

2022-03-13 21:51:35 字數 1030 閱讀 3602

今天看了一篇文章說下自己的理解

先看一段**,看起來很正常,但是實際上這段**會報錯!

if(preg_match("#\\\\|\\#i",$cmd,$match))
它會報錯,報錯的資訊是 結束分隔符 不存在,這裡指的 結束分隔符 實際上在php正則中就是 定界符 !

再看這段,只是前後換了下位置 發現就不會報錯了!

if(preg_match("#\\|\\\\#i",$cmd,$match))
那麼問題肯定出現在\\上,我們對 $cmd 進行傳資料來匹配

$cmd => \ 單個反斜槓 結果 無匹配

$cmd => \\ 兩個反斜槓 結果 無匹配

發現結果都不匹配!

那麼來看看\\的問題所在,其實這裡正則中的\\的解析流程是這樣的:

1、\\先經過php正則解析器為乙個\

2、\又跟'|'結合到一起,從而在 正規表示式的解析器解析為\|

3、又因為'|'是正則中的保留符號,所以需要乙個轉義符來轉義,所以\\|這個的結果就是匹配 '|'

4、後面又跟了\\\\,這裡 先經過php正則解析器為\\,然後在經過 正規表示式的解析器為 ''

5、那麼最後的正規表示式就是匹配|\這兩個符號!

那麼也就可以理解上面的那個為什麼會報錯了,因為結果就是匹配\#,所以我們還需要加個 定界符#,來進行修復

if(preg_match("#\\\\|\\##i",$cmd,$match))
這樣就不會報錯了!

斜槓 和 反斜槓 的區別

unix linux 使用斜槓 作為路徑分隔符,而 web 應用最新使用在 unix 系統上面,所以目前所有的網路位址都採用斜槓 作為分隔符。windows 由於已經使用斜槓 作為 dos 命令提示符的引數標誌了,為了不混淆所以採用反斜槓 作為路徑分隔符。所以目前windows系統上的檔案瀏覽器都是...

斜槓 和反斜槓 的區別

unix使用斜桿 作為路徑分隔符,而web應用最新使用在unix系統上面,所以目前所有的網路位址都採用 斜桿 作為分隔符。windows由於使用 斜桿 作為dos命令提示符的引數標誌了,為了不混淆,所以採用 反斜槓 作為路徑分隔符。所以目前windows系統上的檔案瀏覽器都是用 反斜槓 作為路徑分隔...

正斜槓 和反斜槓 的區別

我認真搜了一下,發現問這個問題的人還不少,知乎上也有提問的。來看看知乎的回答。問題 如何區分符號 和 的用法?某些回答 1 fenng 記住一件事情,除了在程式中,其它地方幾乎不需要用 應該就差不多了。btw,我最反感的一件事情就是應該用 的地方用了 也是用來鑑別乙個人是否足夠細心的乙個依據。2 n...