做日誌分析工作的經常需要跟成千上萬的日誌條目打交道,為了在龐大的資料量中找到特定模式的資料,常常需要編寫很多複雜的正規表示式。例如列舉出日誌檔案中不包含某個特定字串的條目,找出不以某個特定字串打頭的條目,等等。
正規表示式中有前瞻(lookahead)和後顧(lookbehind)的概念,這兩個術語非常形象的描述了正則引擎的匹配行為。需要注意一點,正則表 達式中的前和後和我們一般理解的前後有點不同。一段文字,我們一般習慣把文字開頭的方向稱作「前面」,文字末尾方向稱為「後面」。但是對於正規表示式引擎來說,因為它是從文字頭部向尾部開始解析的(可以通過正則選項控制解析方向),因此對於文字尾部方向,稱為「前」,因為這個時候,正則引擎還沒走到那塊,而對文字頭部方向,則稱為「後」,因為正則引擎已經走過了那一塊地方。
所謂的前瞻就是在正規表示式匹配到某個字元的時候,往「尚未解析過的文字」預先看一下,看是不是符合/不符合匹配模式,而後顧,就是在正則引擎已經匹配過的文字看看是不是符合/不符合匹配模式。符合和不符合特定匹配模式我們又稱為肯定式匹配和否定式匹配。
現代高階正規表示式引擎一般都支援都支援前瞻,對於後顧支援並不是很廣泛,因此我們這裡採用否定式前瞻來實現我們的需求。
第乙個分組啥都沒有匹配到,而第二個分組卻匹配了整個字串。再回過頭來好好分析一下剛才那個正規表示式。實際上,當正則引擎解析到a區域的時候,就已經 開始執行b區域的前瞻工作。這個時候發現當a區域為null的時候匹配成功——.*本來就允許匹配空字元,前瞻條件又滿足,a區域後面緊跟著的是 「2009」字串,而並不是robots。因此整個匹配過程成功匹配到所有條目。
將.*?移入前瞻表示式
硬體變革前瞻 SSD和記憶體的前沿分析
如果未來ssd的速度足夠快,記憶體是不是就會消失?這問題首先要從計算機體系架構講起,目前我們所使用的各種計算機,基本上都是馮諾依曼架構,多級儲存架構。cpu在執行過程中都要從儲存系統中讀取指令,讀 寫資料。最高的一級是 cpu內的暫存器,速度等同於cpu。然後是多級cach,每一級速度略慢。接著就是...
php鏈結資料庫應用分析
php教程 php鏈結資料庫應用於介紹 和 or die 隱藏錯誤和條件顯示 connect mysql connect 127.0.0.1 root or die 鏈結錯誤 開啟鏈結到mysql select db mysql select db 資料庫名 connect 如果不特別宣告連線標示符...
php橋接模式應用案例分析
橋接模式是將抽象部分與它的實現部分分離,使它們都可以獨立地變化。示例 當乙個資訊時 根據傳送渠道分為 qq訊息 email訊息 簡訊訊息等 根據訊息型別分為 普通 警告 危急等 每種訊息都有三種型別 普通qq訊息 警告qq訊息 危急qq訊息.每種情況單獨寫乙個類就需要寫九個,如果擴充套件乙個型別,就...