Regex,正則
Regex是你所定義的模式模板(pattern template), Linux可以利用它來過濾文本。
Regex類型
Regex是通過Regex引擎實現的。Regex引擎是一套底層軟體,複雜解釋Regex並使用這些模式進行文本匹配。
在Linux中,有兩種流行的Regex引擎。
- POSIX基礎Regex(basic regular expression, BRE)引擎
- POSIX擴充Regex(extended regular expression)引擎
定義BRE模式特殊字元
.*[]^${}\+?|()
錨字元點號字元
點號用來匹配除分行符號以外任意單個字元。

字元組(character class)
用來限定待匹配的具體字元。

排除型字元組
尋找組中沒有的字元。只要在字元組的開頭加個脫字元^.

即使是排除,字元組仍必須匹配一個字元。
區間
可以在單破折線符號在字元組中表示字元區間。只需要指定區間的第一個字元、單破折線以及區間的最後一個字元就行了。

特殊字元組

星號
字元後放置星號表示該字元必須在匹配模式的文本中出現0次或多次。

擴充Regex問號
類似星號,不過前面的字元可以出現0次或1次,單僅限於此。

加號
表示前面的字元可以出現1次或多次,但必須出現一次。

花括弧
為可重複的Regex指定一個上限。這通常稱為間隔(interval)。可以用兩種格式來指定區間。
- m: Regex準確出現m次。
- m, n: Regex至少出現m次,至多n次。

管道符號
|
管道符號允許在檢查資料時,用邏輯OR的方式指定Regex引擎要用的兩個或多個模式。如果任何一個模式比對了資料流文本,文本就通過測試。如果沒有模式比對,則資料流文本匹配失敗。
運算式分組
可以用圓括弧進行分組。當將Regex模式分組時,該組會被視為一個標準字元。可以像對一般字元一樣給該組使用特殊字元。

實戰-解析郵件地址
基本格式: username@hostname
username可用字母數字字元以及以下特殊字元
- 點號
- 單破折線
- 加號
- 底線
hostname由一個或多個網域名稱和一個伺服器名組成。網域名稱和伺服器名只允許字母數字字元和點號、底線
從左往右開始構建Regex
1. 使用者名稱可以有多個有效字元。
^([a-zA-Z0-9_\-\.\+]+)@
2. hostname
([a-zA-Z0-9_\-\.])
3. 頂級網域名稱
\.([a-zA-Z]{2,5})
組合起來就是
^([a-zA-Z0-9_\-\.\+]+)@([a-zA-Z0-9_\-\.])\.([a-zA-Z]{2,5})