2. 理解部分
3. 參考鏈結
正規表示式理解起來很多時候沒有規律可言,因此本文將正則方面的知識總結為死記部分和理解部分。其中死記部分內容較少,大家不用追求理解,只管硬背住就行。理解部分內容較多,大家結合理解進行記憶。
+
:代表前面的字元必須至少出現一次(1次或多次)
*
:代表字元可以不出現,也可以出現一次或者多次(0次、或1次、或多次)
?
:問號代表前面的字元最多隻可以出現一次(0次、或1次)
()
:標記乙個子表示式的開始和結束位置
: 標記乙個範圍表示式,
{}
:標記限定符表示式,作用同+
*
?
,限定前面字元出現次數
^
:匹配輸入字串的開始位置
$
:匹配輸入字串的結尾位置
.
:匹配除換行符\n
之外的任何單字元
|
:指明兩項之間的乙個選擇
要匹配特殊字元需要使用\
轉義
正規表示式一般由三個部分組成,即:
位置+範圍+數量+位置
:n 是乙個非負整數。匹配確定的 n 次。例如,『o』 不能匹配 「bob」 中的 『o』,但是能匹配 「food」 中的兩個 o。
:n 是乙個非負整數。至少匹配n 次。例如,『o』 不能匹配 「bob」 中的 『o』,但能匹配 「foooood」 中的所有 o。『o』 等價於 『o+』。『o』 則等價於 『o*』。
:m 和 n 均為非負整數,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,「o」 將匹配 「fooooood」 中的前三個 o。『o』 等價於 『o?』。請注意在逗號和兩個數之間不能有空格。
*
、+
限定符都是貪婪的,因為它們會盡可能多的匹配文字,只有在它們的後面加上乙個?
就可以實現非貪婪或最小匹配。
對字串 「a123z456z」 進行匹配
/a.*z/
貪婪:匹配從最開始的 a 到最後的 z 之間的所有內容:
a123z456z
/a.*?z/
非貪婪:只匹配開始的 a 到第乙個 z 之間的所有內容:
a123z456z
定位符用來描述字串或單詞的邊界,^
和$
分別指字串的開始與結束,\b
描述單詞的前或後邊界,\b
表示非單詞邊界。
對 「chapter aabb」 中的單詞 ''chapter" 進行匹配
/\bcha/
:在單詞的開始處查詢匹配項
/ter\b/
:在單詞的結尾處查詢匹配項
/\bapt/
:匹配 chapter 中的字串 apt,但不匹配 aptitude 中的字串 apt
正則提供乙個元字元中括號來表示區間條件。
限定0到9 可以寫成[0-9]
限定a-z 寫成[a-z]
限定某些數字[165]
普通字元是指字母、數字、標點,以及不可見字元(如\n
,\r
,\t
等)
\d
:任意單個數字,等價於[0-9]
\d
:任意單個非數字,等價於[^0-9]
\s
:任意單個空白符,等價於[ \f\n\r\t\v]
\s
:任意單個非空白符,等價於[^a-za-z0-9_]
\w
:任意單個字母數字和_,等價於[a-za-z0-9_]
,(\w
有可能匹配到非英文本元,詳見正規表示式\w並不完全等於[a-za-z0-9])
\w
:任意單個非字母數字和_,等價於[^a-za-z0-9_]
[:alnum:]
:任意單個字母或數字,等價於[a-za-z0-9]
[:alpha:]
:任意單字母,等價於[a-za-z]
[:digit:]
:任意單個數字,等價於[0-9]
[:lower:]
:任意單個小寫字母,等價於[a-z]
[:upper:]
:任意單個大寫字母,等價於[a-z]
[:space:]
:任意單個空白字元:製表符、空格
正規表示式分類:
基本的正規表示式(basic regular expression 又叫 basic regex 簡稱 bres)
擴充套件的正規表示式(extended regular expression 又叫 extended regex 簡稱 eres)
perl 的正規表示式(perl regular expression 又叫 perl regex 簡稱 pres
不同命令和不同程式語言中使用的正規表示式很可能不是同一類,其中使用較多的是擴充套件正規表示式和 perl 正規表示式。
此外,linux 系統命令主要使用擴充套件正則,而 python 使用 perl 正則,因此這兩者的正規表示式有時候不通用。
詳細區別可見:linux shell 正規表示式(bres,eres,pres)差異比較
注意:由於基本正則與另外兩種正則的寫法差異較大,建議避免使用基本正規表示式。
sed
:支援基本正則。sed -r
:支援擴充套件正則。
grep
:支援基本正則。egrep / grep -e
:支援擴充套件正則。egrep -p / grep -p
:支援 perl 正則。
awk
:支援擴充套件正則。
擴充套件正則和 perl 正則簡略區別如下:
擴充套件正則僅支援:\w
,\w
,不支援:\d
,\d
,\s
,\s
,\t
,\n
,\r
等。
正規表示式 - 教程
正規表示式基礎知識
我們先從簡單的開始。假設你要搜尋乙個包含字元 cat 的字串,搜尋用的正規表示式就是 cat 如果搜尋對大小寫不敏感,單詞 catalog catherine sophisticated 都可以匹配。也就是說 1.1 句點符號 假設你在玩英文拼字遊戲,想要找出三個字母的單詞,而且這些單詞必須以 t ...
正規表示式基礎知識
乙個正規表示式就是由普通字元 例如字元 a 到 z 以及特殊字元 稱為元字元 組成的文字模式。該模式描述在查詢文字主體時待匹配的乙個或多個字串。正規表示式作為乙個模板,將某個字元模式與所搜尋的字串進行匹配。如 jscript vbscript 匹配 t t 匹配乙個空白行。d d d d 驗證乙個i...
正規表示式基礎知識
正規表示式基礎知識 正規表示式是一種可以用於模式匹配和替換的強有力的工具,乙個正規表示式就是由普通的字元 例如字元 a 到 z 以及特殊字元 稱為元字元 組成的文字模式,它描述在查詢文字主體時待匹配的乙個或多個字串。正規表示式作為乙個模板,將某個字元模式與所搜尋的字串進行匹配。正規表示式在字元資料處...