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