Linux之Regex

來源:互聯網
上載者:User

標籤:pos   文本   ade   osi   基本Regex   express   dig   sci   不包含   

 

 

Regex與萬用字元的區別:

  • 最常應用Regex的命令是grep(egrep),sed,awk。
  • Regex和萬用字元有本質區別,Regex用來找:【檔案】內容,文本,字串。一般只有三劍客支援。萬用字元用來找:檔案名稱。普通命令都支援

 

Regex的分類

POSIX規範將Regex的分為了兩種

  • 基本Regex(BRE,basic regular expression)
  • 進階功能:擴充Regex(ERE,extended regular expression)

BRE和ERE的區別僅僅是元字元的不同

  • BRE(基礎Regex)只承認的元字元有^$.[]*  其他字元識別為一般字元:\(\)
  • ERE(擴充Regex)則添加了(){}?+|等
  • 只有在用反斜線“\”進行轉義的情況下,字元(){}才會在BRE被當作元字元處理,而BRE中,任何元符號前面加上反斜線反而會使其被當作一般字元來處理。

 

基礎Regex
字元 描述
^ ^word: 搜尋以word開頭的內容
$ word$: 搜尋以word結尾的內容
^$ 表示空行,不是空格
 . 代表且只能代表任意一個字元(不匹配空行)
 \ 逸出字元,讓有特殊含義的字元脫掉馬甲,現出原形,如\.只表示小數點
 * 重複之前的字元或文本0個或多個,之前的文本或字元連續0次或多次
.* 任意多個字元
^.* 以任意多個字串開頭,.*儘可能多,有多少算多少,貪婪性
[^abc] 匹配不包含^後的任一字元a或b或c,是對[abc]的取反,且與^含義不同
a\{n,m\} 重複前面a字元n到m次(如果用egrep或sed -r可去掉斜線)

 

 

a\{n,\} 重複前面a字元至少n次,如果用egrep或sed -r可去掉斜線
a\{n\} 重複前面a字元n次,如果用egrep或sed -r可去掉斜線
--- ---
擴充RegexERE
特殊字元 含義與例子
+ 重複前一個字元一次或一次以上,前一個字元連續一個或多個,把連續的文本/字元取出
? 重複前面一個字元0次或1次(.是有且只有1個)
管道符| 表示或者同時過濾多個字元
() 分組過濾被括起來的東西表示一個整體(一個字元)

 

管道符|

(): 分組過濾被括起來的東西表示一個整體(一個字元)

 

最早的文本匹配程式,使用POSIX定義的基本Regex(BRE)來匹配文本。

  • grep -E 強制讓grep直接認識正則符號,不需要再進行轉義
  • egrep 等效grep -E 天生就能認識正則符號
  • 我們平時備份可以通過cp 檔案名稱{,.bak}的形式進行,避免再打一次檔案名稱
  • sed -r :讓sed支援正則

 

基本正則和擴充正則區別
基礎正則BRE 擴充正則ERE
\? ?
\+ +
\{\} {}
\( \ ) ()
\  

所謂基礎正則實際上就是得需要逸出字元配合表達的正則,而擴充正則就是讓命令擴充它的許可權讓他直接就認識正則表達符號(egrep,sed -r,awk直接支援)

 

補充說明

1 一些預定義的:

Regex 描述 樣本
[:alnum:] [a-zA-Z0-9]匹配任意一個字母或數字字元 [[:alnum:]]+
[:alpha:] 匹配任意一個字母字元(包括大小寫字母) [[:alpha:]]{4}
[:blank:] 空格與定位字元(橫向縱向) [[:blank:]]*
[:digit:] 匹配任意一個數字字元 [[:digit:]]?
[:lower:] 匹配小寫字母 [[:lower:]]{5,}
[:upper:] 匹配大寫字母 ([[:upper:]]+)?
[:punct:] 匹配標點符號 [[:punct:]]
[:space:] 匹配一個包括分行符號,斷行符號等在內的所有空白符 [[:space:]]+
[:graph:] 匹配任何一個可以看得見的且可以列印的字元 [[:graph:]]
[:xdigit:] 任何一個十六進位數 [[:xdigit:]]+
[:cntrl:] 任何一個控制字元(ASCII字元集中的前32個字元) [[:cntrl:]]
[:print:] 任何一個可以列印的字元 [[:print:]]

2 元字元

元字元是一種Perl風格的Regex,只有一部分文本處理工具支援它,並不是所有的文本處理工具都支援

Regex 描述 樣本
\b 單詞邊界 \bcool\b匹配cool,不匹配coolant
\B 非單詞邊界 cool\B匹配coolant不匹配cool
\d 單個數字字元 b\db匹配b2b,不匹配bcb
\D 單個非數字字元 b\Db匹配bcb不匹配b2b
\w 單個單詞字元(字母,數字與_) \w匹配1或a,不匹配&
\W 單個非單詞字元 \W匹配&,不匹配1或a
\n 分行符號 \n匹配一個新行
\s 單個空白字元 x\sx匹配xx,不匹配xx
\S 單個非空白字元 x\S\x匹配xkx,不匹配xx
\r 斷行符號 \r匹配斷行符號
\t 橫向定位字元 \t匹配一個橫向定位字元
\v 垂直定位字元 \v匹配一個垂直定位字元
\f 換頁符 \f匹配一個換頁符

 

參考部落格:http://www.cnblogs.com/chensiqiqi/p/6285060.html

Linux之Regex

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.