正規表示式

2021-08-21 06:59:52 字數 2558 閱讀 4232

grep是linux中常用的文字過濾工具,按照關鍵字或者正規表示式進行過濾,它是按行匹配的,通常是linux中處理文字的第一步。

grep工具採用的是貪婪匹配,即:匹配當前行中所有的匹配內容。

grep工具如果匹配到了,它的退出碼是0,如果沒有匹配到,它的退出碼是1。

選項

-i 忽略大小寫的不同

-n 同時輸出行號

-v 反向選擇,顯示出沒有'搜尋字串'內容的一行

-o 只輸出檔案中匹配到的部分

-q 安靜模式匹配

-r/r 遞迴查詢

-e 使用擴充套件正則匹配

--color 將匹配得到的內容進行語法高亮

1. 概念
正規表示式是用於描述一組字串特徵的模式,用來匹配特定的字串,通過特殊字元+普通字元來進行描述,從而達到文字匹配目的;

正規表示式被整合於各種文字編輯器中和文字處理工具中;

正規表示式基本與語言無關。

正則匹配有三類:基本的正規表示式、擴充套件的正規表示式、perl的正規表示式

2. 正規表示式的基本要素
字元類

數量限定符

位置限定符

特殊符號

3. 字元類

字元含義

舉例.匹配任意乙個字元

a.可以匹配ab、a1等

匹配括號中的任意乙個字元

[ab2]c可以匹配ac、bc、2c

-在內表示字元範圍

[0-9a-f]a可以匹配3a、ba

^在內的開頭,匹配除括號中的字元之外的任意乙個字元

[^ab]2可以匹配x2、z2,但是不可以匹配a2、b2

[[:***:]]

grep工具預定義的一些命令字元類

[[:alpha:]]匹配乙個字母,[[:digit:]]匹配乙個數字

4. 數量限定符

字元含義舉例?

緊跟在它前面的單元應匹配零次或一次

[0-9]?a匹配1a、2a、a

+緊跟在它前面的單元應匹配一次或多次

[a-za-z0-9_.-]+@[a-za-z0-9_.-]+com匹配乙個email位址

*緊跟在它前面的單元應匹配零次或多次

[a-za-z_]+[a-za-z_0-9]*匹配c語言的識別符號

緊跟在它前面的單元應精確匹配n次

[1-9][0-9]匹配100到999的整數

緊跟在它前面的單元應匹配至少n次

[1-9][[0-9]匹配100以上的整數

緊跟在它前面的單元應匹配最多m次

[0-9]相當於[0-9]

緊跟在它前面的單元應匹配至少n次,最多m次

([0-9]\.)[0-9]匹配ip位址

上面的例子a中,在相關的文件中並未出現,應該是錯誤或者廢棄的用法

5. 位置限定符

字元含義舉例^

匹配行首的位置

^content匹配位於一行開頭的content

$匹配行末的位置

;$匹配位於一行結尾為;號,^$匹配空行

\<

匹配單詞開頭的位置

\>

匹配單詞結尾的位置

p>匹配以p結尾的單詞

\b匹配單詞開頭或結尾的位置

\bat\b匹配at,不匹配cat,batch等

\b匹配非單詞開頭和結尾的位置

\bat\b匹配battery,不匹配attend等

\b用來限定目標串中是否有以指定字串開頭的單詞,稱之為詞界,\b稱為非詞界

^$確定目標串出現的位置,稱之為錨點

6. 特殊符號

字元含義舉例\

轉義字元

\《即將普通字元《轉義為單詞開頭的位置

()將正規表示式的一部分括起來組成乙個單元

|連線兩個子表示式,表示或的關係

基本正規表示式和擴充套件正規表示式的區別:

在基本正則的規範下,?+{}|()應解釋為普通字元,要表示上述特殊含義則需要加\轉義。反之,在擴充套件規範下,?+{}|()應該被理解為特殊含義,要取字面意義,也要對其進行\轉義。

正規表示式 正規表示式 總結

非負整數 d 正整數 0 9 1 9 0 9 非正整數 d 0 負整數 0 9 1 9 0 9 整數 d 非負浮點數 d d 正浮點數 0 9 0 9 1 9 0 9 0 9 1 9 0 9 0 9 0 9 1 9 0 9 非正浮點數 d d 0 0 負浮點數 正浮點數正則式 英文本串 a za z...

正規表示式 表示式

網域名稱 a za z0 9 a za z0 9 a za z0 9 a za z0 9 interneturl a za z s 或 http w w w 手機號碼 13 0 9 14 5 7 15 0 1 2 3 5 6 7 8 9 18 0 1 2 3 5 6 7 8 9 d 號碼 x x x...

Linux正規表示式 編寫正規表示式

為了所有實用化的用途,你可以通過使用程式產生正確的結果。然而,並不意味著程式總是如你所願的那樣正確地工作。多數情況下,如果程式不能產生想要的輸出,可以斷定真正的問題 排除輸入或語法錯誤 在於如何描述想要的東西。換句話說,應該考慮糾正問題的地方是描述想要的結果的表示式。表示式不完整或者公式表示得不正確...