點擊返回 自學Linux命令行與Shell腳本之路html
17.1-正則表達式
1. 正則表達式概念
正則表達式是對字符串操做的一種邏輯公式,就是用事先定義好的一些特定字符、及這些特定字符的組合,組成一個「規則字符串」,這個「規則字符串」用來表達對字符串的一種過濾邏輯。規定一些特殊語法表示字符類、數量限定符和位置關係,而後用這些特殊語法和普通字符一塊兒表示一個模式,這就是正則表達式(Regular Expression)。java
使用緣由:python
- 程序設計過程當中不可避免的遇處處理某些文本狀況,有時候要查找符合某些比較複雜規則的字符串。正則表達式以很是簡單的代碼完成。
- Linux實用程序在輸入數據時,將正則表達式模式和數據進行匹配。若是數據與模式一致,它接受處理(稱做「匹配」)。若是數據與模式不一致,就拒絕(稱做「過濾」)。
正則表達式是經過正則表達式引擎regular expression engine實現的。正則表達式引擎值是一套底層軟件,負責解釋正則表達式模式並使用這些模式進行文本匹配。
在linux系統中,比較流行的正則表達式引擎有兩種:mysql
- POSIX基礎正則表達式引擎BRE
- POSIX擴展正則表達式引擎ERE
linux系統不一樣應用可使用不一樣類型的正則表達式:linux
- 編程語言java 、perl 、python
- linux實用使用工具sed編輯器 、gawk程序、 grep工具
- 主流應用mysql、 PostgreSQL
常見的支持正則表達式的UNIX工具:正則表達式
- grep命令族:用於匹配文本行
- sed流編輯器:用於改變輸入流 (只符合BRE規範的子集)
- gawk程序:用於處理字符串的語言
- more或者less等:文件查看程序
- ed,vi或者vim等:文本編輯器
2. 正則表達式主要組成
- 字符類(Character Class)
- 數量限定符(Quantifier):
- 位置限定符(Anchor):描述各類字符類以及普通字符之間的位置關係
2.1 字符類
字符類(Character Class):在模式中表示一個字符,可是取值範圍是一類字符中的任意一個。sql
. 用來匹配除換行符以外的的任意單個字符, 它必須匹配一個字符,若是在.字符的位置沒有字符,那麼模式不成立。(空格也是字符)
express
- "s..d" 匹配在s和d這兩個字母之間必定有兩個字符的單詞
- "s.*d" 匹配在s和d字母之間有任意字符
- ".*" 匹配全部內容
[ ]包含出如今全部該字符組中的字符,能夠在單個表達式中使用多個字符組,字符組可使字符也能夠是數字。
編程
- " [aeiou ]" 匹配任意一個元音字母,
- " [0-9] " 匹配任意一位數字,
- " [a-z][0-9] " 匹配小寫字母和一位數字構成的兩位字符。
- " s[ao]id " 匹配s和i字母中,要麼是a,要麼是o
- " ^[a-z] " 匹配小寫字母開頭的行
- " [^0-9] " 匹配任意一位非數字字符,
- " [^a-z] " 表示任意一位非小寫字母
- " ^[^a-z] " 匹配不是小寫字母開頭的行
- " ^[^a-zA-Z] " 匹配不是字母開頭的行
- 在[ ]號內使用表示字符範圍。vim
^ 脫字符定義從數據流文本行的行首開始的模式。若是模式出如今行首以外的位置,正則表達式模式則沒法匹配。
- "^hello" 匹配以hello開頭的行
- "^M" 匹配以大寫「M」開頭的行
- "[^0-9]" 匹配任意一位非數字字符,
- "[^a-z]" 表示任意一位非小寫字母
- "^[^a-z]" 匹配不是小寫字母開頭的行
- "^[^a-zA-Z]" 匹配不是字母開頭的行
[ [ :xxxx:] ] BRE特殊字符組,用來匹配特定類型的字符。
2.2 數量限定符
數量限定符(Quantifier): 每一部分能夠有一個或多個x字符
2.3 位置限定符
位置限定符(Anchor):描述各類字符類以及普通字符之間的位置關係
2.4 其餘特殊定符
3. 正則表達式分類
- 基本的正則表達式(Basic Regular Expression 又叫Basic RegEx 簡稱BREs)
- 擴展的正則表達式(Extended Regular Expression 又叫Extended RegEx 簡稱EREs)
- Perl的正則表達式(Perl Regular Expression 又叫Perl RegEx 簡稱PREs)
- Python的正則表達式(Python Regular Expression 又叫Perl RegEx 簡稱PREs) 等