1. 程式人生 > >正則表達式匹配二次轉義的東西 / 怎麽處理?

正則表達式匹配二次轉義的東西 / 怎麽處理?

tps 遇到 xxxxxx 點號 div 我們 http tail article

原來的源碼裏的數據大概是這麽形式的
<div class=\"WB_handle W_fr\" mid=\"4170395588014391\">XXXXXX<em>XXXXXXX<\/em>.*?<\/div>
然後就死活出不來了
經過思考(其實是我之前好像遇到過,記憶模糊但隨便試了試)寫成下面這樣的可以匹配到
<div class=\\\\"WB_handle W_fr\\\\" mid=\\\\"4170395588014391\\\\">.*?<em>(.*?)<\\\/em>.*?<\\\/div>

這裏,我們可以看一下,我們這一個/用了////表示,但是後面的\\\/可以\\\\/可以\\\\\/也可以

找了一點資料 https://blog.csdn.net/zttaiwx/article/details/53981755

由此可見,在字符串中,兩個反斜杠被解釋為一個反斜杠,然後在作為正則表達式, \\ 則被正則表達式引擎解釋為 \,所以在正則表達式中需要使用四個反斜杠。
也就是說,前兩個反斜杠在字符串中被解釋為一個反斜杠,後兩個也被解釋為一個反斜杠,這時解釋完畢後變成兩個反斜杠,再由正則表達式解釋兩個反斜杠,就又解釋成了一個反斜杠,所以,在正則表達式中要匹配一個反斜杠時,需要四個反斜杠。

同理,要匹配點號時,需要在點號之前加上兩個反斜杠,否則將被正則表達式當作一個點號,一個點號在正則表達式中表示匹配任意字符了。

那麽\\\/是兩個\用來轉義了 \\\\/則是\\\\視為一個\ 而\\\\\/ 前四個視為一個\後面視為轉義

目前是這麽理解的,以後有待考驗

正則表達式匹配二次轉義的東西 / 怎麽處理?