濮阳杆衣贸易有限公司

主頁 > 知識庫 > linux下關(guān)于正則表達式grep的一點總結(jié)

linux下關(guān)于正則表達式grep的一點總結(jié)

熱門標簽:個性化地圖標注在線 百度地圖標注名編輯 怎么在高德地圖標注行走軌跡 安徽移動外呼系統(tǒng) 施工地圖標注怎么做 清遠陽山400電話號碼如何申請 襄陽房產(chǎn)電銷機器人招商 深圳400電話辦理那家好 百度地圖標注飯店位置怎么

正則表達式(Regular Expression)是用于描述一組字符串特征的模式,用來匹配特定的字符串。通過特殊字符+普通字符來進行模式描述,從而達到文本匹配目的工具。類似于生活中常見的尋人啟示,通過描述一個人的特征來進行“搜索匹配”
如今正則已經(jīng)被我們廣泛應(yīng)用,目前被集成到了各種文本編輯器/文本處理工具當(dāng)中

應(yīng)用場景**驗證: **表單提交時,進行用戶名密碼驗證。**查找: **從大量信息中快速提取指定內(nèi)容。在一批url中,查找指定url替換: 將指定格式的文本,進行正則匹配查找,找到之后進行特定替換,(vim文本替換等)

在很多技術(shù)領(lǐng)域(比如,自然語言處理,數(shù)據(jù)存儲等),正則表達式可以很方便的提取出我們想要的信息,所以這部分必不可少構(gòu)成基本要素字符類數(shù)量限定符位置限定符特殊符號

1. 字符類:

字符 說明 舉例
. 匹配任意的一個字符 abc. 可以匹配abcd、abc0等
[] 匹配 [] 內(nèi)的任意一個字符 [012]a可以匹配0a、1a、2a
- 在括號內(nèi)表示字符范圍 如[0-9]可以匹配任何一個數(shù)字
^ 放在[]內(nèi)前面表示匹配除括號中字符外的任意一個字符 [^ab]c可以匹配1c、dc,但是不能匹配ac、bc
[[:xxx:]] grep工具預(yù)定義的一些命名字符類 [[:digit:]]可以匹配一個數(shù)字,[[:alpha:]]匹配一個字符,[[:lower:]]匹配任何一個小寫字母等

應(yīng)用:

grep使用--color選項將匹配的字符串以紅色標注出來Linux下可以用echo $?來打印上一條命令執(zhí)行的退出碼,為0表示執(zhí)行成功,1表示失敗。

實驗如下:

注意:使用 . 默認為貪心匹配,和后面的正則匹配方式相關(guān),后面再述。

2. 數(shù)量限定符:

字符 說明 舉例
? 匹配緊跟它前面的單元(前面的一個數(shù)字或字符) 0或1次 如匹配小數(shù),用0\.?[0-9]匹配0.1 、0.2、0.3等;由于.在正則里面是特殊符號所以需要用\進行轉(zhuǎn)義操作(后面再說)
+ 匹配緊跟它前面的單元 1或多次 [a-zA-Z0-9_.-]+@[a-zA-Z0-9_.-]+\.com匹配一個郵箱地址
* 匹配緊跟它前面的單元0或多次 [0-9][0-9]*匹配至少一位數(shù)字,等價于[0-9]+
{N} 精確匹配緊跟它前面的單元N次 [0-9]{3}匹配000到999之間的數(shù)字
{N,} 匹配緊跟它前面的單元至少N次 [0-9]{3,}匹配三位及其以上的數(shù)字
{,M} 匹配緊跟它前面的單元最多M次 [0-9]{,1}等價于[0-9]?
{N,M} 匹配緊跟它前面的單元N~M次 近似匹配IP地址:[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}

應(yīng)用:

3. 位置限定符:

字符 說明 舉例
^ 匹配行首位置,從行首開始匹配 ^world只匹配一行開頭的world
$ 匹配行末位置,從行末尾開始匹配 ;$匹配一行末尾的;號,^$匹配空行
匹配單詞開始位置 th匹配this,不匹配teach、ethernet
\&; 匹配單詞末尾位置 p\&;匹配sleep、leap等,不匹配parent、sleepy
\b 匹配單詞的開始位置、末尾位置 \borld匹配world、aorld,\borld\b只匹配orld
\B 匹配非單詞的開頭、末尾位置 如 \Bat\B匹配battery,不匹配attend、hat等以字符串"at"開頭、結(jié)尾的單詞

注意:其中 \b 用來限定是目標串中是否有以指定字符串開頭的單詞,我們稱之為詞界。 \B 稱之為非詞界
應(yīng)用:

4. 特殊符號:

字符 說明 舉例
\ 轉(zhuǎn)義字符,普通字符轉(zhuǎn)義為特殊字符,特殊字符轉(zhuǎn)義為普通字符 寫成匹配單詞開頭,.前面加上\寫成\.. 的字面值
() 將正則表達式的一部分括起來組成一個單元,可以對整個單元使用數(shù)量限定符 ([0-9]{1,3}\.){3}[0-9]{3}匹配IP地址
| 連接兩個子表達式,表示或的關(guān)系 n(o|either)匹配no或neither

應(yīng)用:

( )將包含內(nèi)容括起來作為一個整體,進而通過數(shù)量限定符限定。

| 用來級聯(lián)多個條件,只要有任意一個匹配,即可匹配,表示或者關(guān)系,我們稱之為析取符

正則表達式版本其他常用通用字符集及其替換

符號 等價于 匹配
\d [0-9] 數(shù)字字符
\D [^0-9] 非數(shù)字字符
\w [a-zA-Z0-9_] 數(shù)字字母下劃線
\W [^\w] 非數(shù)字字母下劃線
\s [_\r\t\n\f] 表格,換行等空白區(qū)域
\S [^\s] 非空白區(qū)域

于是, 我們現(xiàn)在可以用這些符號來簡化我們正則表達式的編寫了?試試

可是結(jié)果好像并不如我們所愿?其實這里還與正則表達式版本有關(guān)。正則分為以下幾個版本:

基本的正則表達式(Basic Regular Expression 又叫 Basic RegEx 簡稱 BREs)擴展的正則表達式(Extended Regular Expression 又叫 Extended RegEx 簡稱 EREs)Perl 的正則表達式(Perl Regular Expression 又叫 Perl RegEx 簡稱 PREs)

在grep中指定相應(yīng)的參數(shù)即可,而這幾個版本中默認的就是基本正則,帶上-E選項就是擴展正則,而帶上-P參數(shù)就是用perl版正則。解決前面的問題,我們這里讓grep帶上-P選項便可解決了

版本間區(qū)別正則表達式的Extended規(guī)范和Basic規(guī)范基本相同。只是在Basic規(guī)范下,有些字符 ?+{}|() 應(yīng)解釋為普通字符,要表示上述特殊含義則需要加 \ 轉(zhuǎn)義。反之,在Extended規(guī)范下, ?+{}|() 應(yīng)該被理解成特殊含義,要取其字面值,也要對其進行\(zhòng) \ 轉(zhuǎn)義。所以, grep 工具帶上 -E 選項,表示使用擴展正則來進行匹配(亦可直接使用egrep 命令操作),若沒有,則表示使用基準正則進行匹配。帶-P選項使用的perl正則匹配。它是perl語言集成的最重要的一種特性,它十分強大,很多語言設(shè)計正則式支持的時候基本上都參考Perl的正則表達式。正則匹配模式

貪婪模式

正則表達式去匹配時,會盡量多的去匹配符合條件的內(nèi)容,grep命令 默認使用的就是貪婪匹配,非貪婪模式
正則表達式去匹配時,會盡量少的匹配符合條件的內(nèi)容 也就是說,一旦發(fā)現(xiàn)匹配符合要求,立馬就匹配成功,而不會繼續(xù)匹配下去(除非有g(shù)選項,開啟下一組匹配)

總結(jié):可以看到,非貪婪模式的標識符,就是貪婪模式的標識符后面加上一個 ?

您可能感興趣的文章:
  • linux 正則表達式grep實例分析
  • linux grep與正則表達式使用介紹
  • linux系統(tǒng)用戶管理與grep正則表達式示例教程
  • 淺談Linux grep與正則表達式
  • linux grep正則表達式與grep用法詳解

標簽:駐馬店 南昌 中衛(wèi) 欽州 延邊 阜陽 黑河 臨夏

巨人網(wǎng)絡(luò)通訊聲明:本文標題《linux下關(guān)于正則表達式grep的一點總結(jié)》,本文關(guān)鍵詞  linux,下,關(guān)于,正則,表達式,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《linux下關(guān)于正則表達式grep的一點總結(jié)》相關(guān)的同類信息!
  • 本頁收集關(guān)于linux下關(guān)于正則表達式grep的一點總結(jié)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    娱乐| 婺源县| 双鸭山市| 喀喇| 余庆县| 灵台县| 辉县市| 温宿县| 南城县| 大余县| 洞口县| 甘洛县| 上林县| 广德县| 叶城县| 治多县| 双辽市| 青岛市| 正安县| 宁陕县| 周口市| 九龙坡区| 瑞昌市| 新竹县| 绥江县| 淮北市| 鞍山市| 北京市| 青岛市| 珲春市| 大化| 来宾市| 福海县| 黔西县| 会东县| 铜陵市| 东乡县| 贵德县| 文成县| 天津市| 永新县|