国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

正則表達式基礎學習筆記

IT那活兒 / 1186人閱讀
正則表達式基礎學習筆記

點擊上方“IT那活兒”,關注后了解更多內容,不管IT什么活兒,干就完了?。?!

“父兮生我,母兮鞠我……欲報之德,昊天罔極”。母親節,給母親獻一束什么花?

——無論是堂前萱草花,還是一捧康乃馨,都是對母親的愛與感念。

今日將昨日之所學整理分享給大家。



什么是正則表達式

正則表達式,又稱規則表達式。(英語:Regular Expression,在代碼中常簡寫為regex、regexp或RE),正則表達式是對字符串(包括普通字符(例如,a 到 z 之間的字母)和特殊字符(稱為“元字符”))操作的一種邏輯公式,就是用事先定義好的一些特定字符、及這些特定字符的組合,組成一個“規則字符串”,這個“規則字符串”用來表達對字符串的一種過濾邏輯。



正則表達式的特點


正則表達式的特點是:

  • 靈活性、邏輯性和功能性非常強;

  • 可以迅速地用極簡單的方式達到字符串的復雜控制。

  • 對于剛接觸的人來說,比較晦澀難懂。



業務場景

1. syslog事件標準化

syslog內容如下:

2011 Mar 24 11:51:48 CHN: %ETHPORT-5-IF_DOWN_LINK_FAILURE: Interface Ethernet13/29 is down (Link failure)

2. 自動巡檢正則匹配

統計CPU空閑率:sar 3 10命令中的system列和iowait列的average值。

如下圖:

通過工具測試正則表達式的功能,并將表達式用于到JavaScript編寫相應的巡檢腳本。



正則表達式測試工具

在編寫或測試正則表達式時常用RegexBuddy。



正則表達式規則

1. 普通字符

字母、數字、漢字、下劃線、以及后邊章節中沒有特殊定義的標點符號,都是"普通字符"。表達式中的普通字符,在匹配一個字符串的時候,匹配與之相同的一個字符。

舉例1:

表達式 "27",在匹配字符串 " 9527test:failed" 時,匹配結果如下圖:

舉例2:

表達式 "f",在匹配字符串 " 9527test:failed " 時,匹配結果如下圖:

2. 元字符

常見的元字符如下表:

舉例1:

表達式 "[^A-Z]",在匹配字符串 "FAS3207" 時,只能匹配其中任意一個字符(3或者2或者0或者7),匹配結果如下圖:

舉例2:

表達式 "d+.?d*" 匹配字符串:

  • CPUUtil:99.23

  • MemoryUsage:33.44

  • version:2.0

匹配結果如下圖:

3. 貪婪與非貪婪模式

1)貪婪模式

在使用修飾匹配次數的特殊符號時,有幾種表示方法可以使同一個表達式能夠匹配不同的次數,比如:"{m,n}", "{m,}", "?", "*", "+",具體匹配的次數隨被匹配的字符串而定。這種重復匹配不定次數的表達式在匹配過程中,總是盡可能多的匹配。

比如,針對文本 "failed",舉例如下:

由此可見,"w+" 在匹配的時候,總是盡可能多的匹配符合它規則的字符。雖然第二個舉例中,它沒有匹配最后一個 "d",但那也是為了讓整個表達式能夠匹配成功。

同理,帶 "*" 和 "{m,n}" 的表達式都是盡可能地多匹配,帶 "?" 的表達式在可匹配可不匹配的時候,也是盡可能的 "要匹配"。這 種匹配原則就叫作 "貪婪" 模式 。

2)非貪婪模式

在修飾匹配次數的特殊符號后再加上一個 "?" 號,則可以使匹配次數不定的表達式盡可能少的匹配,使可匹配可不匹配的表達式,盡可能的 "不匹配"。這種匹配原則叫作 "非貪婪" 模式,也叫作 "勉強" 模式。

如果少匹配就會導致整個表達式匹配失敗的時候,與貪婪模式類似,非貪婪模式會最小限度的再匹配一些,以使整個表達式匹配成功。

舉例如下,針對文本 "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-貪婪模式:

表達式( .*)+( ),匹配舉例1的字符串,如下圖:

總結:邊界匹配的地方,如xml文件中的,盡量使用簡捷的非貪婪匹配.*?特別是對于復雜的表達式來說,采用非貪婪匹配.*?寫出來的表達式簡練一些。



業務場景實現

1. syslog解析

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中部分字符串(紅色字體部分)。

1)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)+?

2)RegexBuddy測試效果

Group1、2、3、4、5分別表示字符串中需要的引用,如下圖:

2. 巡檢結果匹配

在巡檢產品中,需要對巡檢命令的輸出結果做正則分析,析取出指定的內容,如下是Linux平臺查看CPU使用情況的巡檢命令及輸出:

1)解析實現

這里需要匹配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}

2)RegexBuddy測試效果

圓括號()用來標記group,并以數字按序引用。在自動巡檢中,使用JavaScripts分析正則表達式,故使用$1和$2表示第一個和第二個group。

注:在正則表達式中,最多能引用9個group。

如上述的正則表達式匹配Avarage一行中的%system和%iowait數值。

 



END



 

 


本文作者:董有知

本文來源:IT那活兒(上海新炬王翦團隊)

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/129525.html

相關文章

  • JavaScript正則達式學習筆記(二) - 打怪升級

    摘要:本文接上篇,基礎部分相對薄弱的同學請移步正則表達式學習筆記一理論基礎。正則表達式標志符全局匹配,即找到所有匹配的。方法返回結果的格式不一致問題這個問題上文正則表達式學習筆記一理論基礎也有體現,這里再單獨拿來說一說,以加深記憶。 showImg(https://segmentfault.com/img/remote/1460000014261596?w=600&h=338); 本文接上篇...

    Jioby 評論0 收藏0
  • es5學習筆記——拜讀JavaScript高級程序設計(持續更新)

    摘要:當以非構造函數形式被調用時,等同于。并且,函數執行完畢后,其活動對象不會被銷毀,因為匿名函數的作用域鏈仍然在引用這個活動對象。知道閉包被銷毀,創建函數的活動對象才會被回收。 本著盡可能多的完善基礎知識,打好基礎,做一條有夢想的咸魚。 1.數據類型 基本數據類型:Undefined,Null,Boolean,Number,String,一種復雜數據類型Object 2.typeof操...

    reclay 評論0 收藏0
  • 正則達式

    摘要:本文內容共正則表達式火拼系列正則表達式回溯法原理學習正則表達式,是需要懂點兒匹配原理的。正則表達式迷你書問世了讓幫你生成和解析參數字符串最全正則表達式總結驗證號手機號中文郵編身份證地址等是正則表達式的縮寫,作用是對字符串執行模式匹配。 JS 的正則表達式 正則表達式 一種幾乎可以在所有的程序設計語言里和所有的計算機平臺上使用的文字處理工具。它可以用來查找特定的信息(搜索),也可以用來查...

    bang590 評論0 收藏0
  • 重磅 | 完備的 AI 學習路線,最詳細的資源整理!

    摘要:是你學習從入門到專家必備的學習路線和優質學習資源。的數學基礎最主要是高等數學線性代數概率論與數理統計三門課程,這三門課程是本科必修的。其作為機器學習的入門和進階資料非常適合。書籍介紹深度學習通常又被稱為花書,深度學習領域最經典的暢銷書。 showImg(https://segmentfault.com/img/remote/1460000019011569); 【導讀】本文由知名開源平...

    荊兆峰 評論0 收藏0
  • js正則達式學習筆記

    摘要:分組小括號功能較多有三種功能,作用一,把單獨的項組合成子表達式。作用三,允許后面引用前面的表達式。如果這時的正則表達式是一個非全局的,那么和正則表達式方法拿到的結果相同。,也可以接受一個正則表達式作為參數。 正則表達式創建字面量創建,a = /abc/gim;構造函數創建,a = new RegExp(abc,gim)正則表達式中的特殊字符,[...] 方括號中的任意字符[^...] ...

    superPershing 評論0 收藏0

發表評論

0條評論

IT那活兒

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<