點擊上方“IT那活兒”,關注后了解更多內容,不管IT什么活兒,干就完了?。?!
“父兮生我,母兮鞠我……欲報之德,昊天罔極”。母親節,給母親獻一束什么花?
今日將昨日之所學整理分享給大家。
正則表達式,又稱規則表達式。(英語:Regular Expression,在代碼中常簡寫為regex、regexp或RE),正則表達式是對字符串(包括普通字符(例如,a 到 z 之間的字母)和特殊字符(稱為“元字符”))操作的一種邏輯公式,就是用事先定義好的一些特定字符、及這些特定字符的組合,組成一個“規則字符串”,這個“規則字符串”用來表達對字符串的一種過濾邏輯。
正則表達式的特點是:
靈活性、邏輯性和功能性非常強;
可以迅速地用極簡單的方式達到字符串的復雜控制。
對于剛接觸的人來說,比較晦澀難懂。
syslog內容如下:
2011 Mar 24 11:51:48 CHN: %ETHPORT-5-IF_DOWN_LINK_FAILURE: Interface Ethernet13/29 is down (Link failure)
統計CPU空閑率:sar 3 10命令中的system列和iowait列的average值。
如下圖:
通過工具測試正則表達式的功能,并將表達式用于到JavaScript編寫相應的巡檢腳本。
在編寫或測試正則表達式時常用RegexBuddy。
字母、數字、漢字、下劃線、以及后邊章節中沒有特殊定義的標點符號,都是"普通字符"。表達式中的普通字符,在匹配一個字符串的時候,匹配與之相同的一個字符。
舉例1:
表達式 "27",在匹配字符串 " 9527test:failed" 時,匹配結果如下圖:
舉例2:
表達式 "f",在匹配字符串 " 9527test:failed " 時,匹配結果如下圖:
常見的元字符如下表:
舉例1:
表達式 "[^A-Z]",在匹配字符串 "FAS3207" 時,只能匹配其中任意一個字符(3或者2或者0或者7),匹配結果如下圖:
舉例2:
表達式 "d+.?d*" 匹配字符串:
CPUUtil:99.23
MemoryUsage:33.44
version:2.0
匹配結果如下圖:
在使用修飾匹配次數的特殊符號時,有幾種表示方法可以使同一個表達式能夠匹配不同的次數,比如:"{m,n}", "{m,}", "?", "*", "+",具體匹配的次數隨被匹配的字符串而定。這種重復匹配不定次數的表達式在匹配過程中,總是盡可能多的匹配。
比如,針對文本 "failed",舉例如下:
由此可見,"w+" 在匹配的時候,總是盡可能多的匹配符合它規則的字符。雖然第二個舉例中,它沒有匹配最后一個 "d",但那也是為了讓整個表達式能夠匹配成功。
同理,帶 "*" 和 "{m,n}" 的表達式都是盡可能地多匹配,帶 "?" 的表達式在可匹配可不匹配的時候,也是盡可能的 "要匹配"。這 種匹配原則就叫作 "貪婪" 模式 。
在修飾匹配次數的特殊符號后再加上一個 "?" 號,則可以使匹配次數不定的表達式盡可能少的匹配,使可匹配可不匹配的表達式,盡可能的 "不匹配"。這種匹配原則叫作 "非貪婪" 模式,也叫作 "勉強" 模式。
如果少匹配就會導致整個表達式匹配失敗的時候,與貪婪模式類似,非貪婪模式會最小限度的再匹配一些,以使整個表達式匹配成功。
舉例如下,針對文本 "failed" 舉例:
效果圖如下:
舉例1-非貪婪模式:
表達式
"10103006020" NAME="F5新建連接數" RESCLASS="ResSwitch">
<OID ID="3002" VENDER="F5"/>
KPI>
"10103006021" NAME="F5客戶端入流量" RESCLASS="ResSwitch">
<OID ID="3003" VENDER="F5"/>
KPI>
"10103006022" NAME="F5客戶端出流量" RESCLASS="ResSwitch">
<OID ID="3004" VENDER="F5"/>
KPI>
如下圖:
舉例2-貪婪模式:
表達式
總結:邊界匹配的地方,如xml文件中的
syslog常用來記錄設備(網絡設備/主機)的狀態改變信息,如網絡接口的狀態、主機系統的狀態事件等,如下是網絡設備接口宕掉后產生的一條syslog事件:
2011 Mar 24 11:51:48 CHN: %ETHPORT-5-IF_DOWN_LINK_FAILURE: Interface Ethernet13/29 is down (Link failure)
由于syslog事件的內容生澀,故通過正則表達式解析并提取指定的字符串,標準化成清晰可讀的事件,如下是通過NMS的標準化后的事件內容:
協議宕在節點 XXX.XXX.17.98的接口Ethernet13/29, 狀態為down,發生時間2011 Mar 24 11:51:48,故障類型:%ETHPORT-5-IF_DOWN_LINK_FAILURE
在上述的標準事件中,提取了原始syslog中部分字符串(紅色字體部分)。
模式匹配以元字符來匹配字符串文本,如下介紹使用轉義字符的方式來使用正則元字符,轉義字符通常是一個反斜線加上一個字母組成。
使用括號()將匹配結果標記為一個group。
完整的正則表達式如下:
(d+s+w+s+d+s+d+:d{2}:d{2})s+w+.s+(S+):s+S+s+(S+)s+iss+(S+)(.*|s)+?
Group1、2、3、4、5分別表示字符串中需要的引用,如下圖:
在巡檢產品中,需要對巡檢命令的輸出結果做正則分析,析取出指定的內容,如下是Linux平臺查看CPU使用情況的巡檢命令及輸出:
這里需要匹配Average一行的%system列的值0.02以及%iowait的值0.00,這里可以用如下正則表達式寫法:
[0-9]+等價于d+ 表示匹配0到9之間的任意一個數字,+表示匹配1個或多個,{2}表示匹配兩個結果。
完整的表達式如下:Average:s+[0-9]+.[0-9]{2}s+[0-9]+.[0-9]{2}
圓括號()用來標記group,并以數字按序引用。在自動巡檢中,使用JavaScripts分析正則表達式,故使用$1和$2表示第一個和第二個group。
注:在正則表達式中,最多能引用9個group。
如上述的正則表達式匹配Avarage一行中的%system和%iowait數值。
END
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/129525.html
摘要:本文接上篇,基礎部分相對薄弱的同學請移步正則表達式學習筆記一理論基礎。正則表達式標志符全局匹配,即找到所有匹配的。方法返回結果的格式不一致問題這個問題上文正則表達式學習筆記一理論基礎也有體現,這里再單獨拿來說一說,以加深記憶。 showImg(https://segmentfault.com/img/remote/1460000014261596?w=600&h=338); 本文接上篇...
摘要:當以非構造函數形式被調用時,等同于。并且,函數執行完畢后,其活動對象不會被銷毀,因為匿名函數的作用域鏈仍然在引用這個活動對象。知道閉包被銷毀,創建函數的活動對象才會被回收。 本著盡可能多的完善基礎知識,打好基礎,做一條有夢想的咸魚。 1.數據類型 基本數據類型:Undefined,Null,Boolean,Number,String,一種復雜數據類型Object 2.typeof操...
摘要:是你學習從入門到專家必備的學習路線和優質學習資源。的數學基礎最主要是高等數學線性代數概率論與數理統計三門課程,這三門課程是本科必修的。其作為機器學習的入門和進階資料非常適合。書籍介紹深度學習通常又被稱為花書,深度學習領域最經典的暢銷書。 showImg(https://segmentfault.com/img/remote/1460000019011569); 【導讀】本文由知名開源平...
摘要:分組小括號功能較多有三種功能,作用一,把單獨的項組合成子表達式。作用三,允許后面引用前面的表達式。如果這時的正則表達式是一個非全局的,那么和正則表達式方法拿到的結果相同。,也可以接受一個正則表達式作為參數。 正則表達式創建字面量創建,a = /abc/gim;構造函數創建,a = new RegExp(abc,gim)正則表達式中的特殊字符,[...] 方括號中的任意字符[^...] ...
閱讀 1347·2023-01-11 13:20
閱讀 1686·2023-01-11 13:20
閱讀 1133·2023-01-11 13:20
閱讀 1860·2023-01-11 13:20
閱讀 4103·2023-01-11 13:20
閱讀 2705·2023-01-11 13:20
閱讀 1386·2023-01-11 13:20
閱讀 3599·2023-01-11 13:20