正規表示式(Regular expression)可以用簡單的字串作為句法規則而以此描述文章中所有符合該字串的指定格式的字串,這個字串被稱為模式(pattern)。
這概念最初由Unix的工具軟體(sed, grep, ...)普及,換句話說學習正規表示式可以讓你在使用Linux時事半功倍
大部分的pattern型式都有以下結構
|
E.g. Linux|macOS
對於包含Linux或macOS的字串皆符合該pattern
.
\r
, \n
以外)Arc. Linux
對於包含Arch Linux或Arco Linux的字串皆符合該pattern[xyz]
-
^
則是反向匹配(只對所有不包含於中括號內的字元符合)[A-Za-z0-9]
對於所有英數字字元皆符合*
{min,max}
{n}
)時則代表出現剛好n次{min,}
代表至少Min次{,max}
代表最多Max次*
)?
{,1}
{m,n}, *, ?
)可以使用lazy mode以進行盡量少次搜尋(pattern)
^
: 符合輸入字串的開始位置$
: 符合輸入字串的結束位置在相容POSIX的UNIX系統上,grep和egrep之類的工具都遵循POSIX規範,一些資料庫系統中的正規表示式也符合POSIX規範。grep、vi、sed都屬於BRE,是歷史最早的正規表示式,因此元字元(+
, *
,|
與括號)必須轉譯之後才具有特殊含義。egrep、awk則屬於ERE,元字元不用轉譯
分為基本型正規表示式(Basic Regular Expression,BRE)和擴充型正規表示式(Extended Regular Expression,ERE)兩大流派,主要差別在於是否需要將pattern中的元字元進行跳轉處理
[:alnum:]
: 字母與數字字元
[:alpha:]
(字母)與[:digit:]
(數字)組合而成[a-zA-Z0-9]
[:ascii:]
: 顧名思義指所有ascii字元[:graph]
: 範圍在\x21到\x7E的ascii字元
[:print:]
[:xdigit:]
: 16進制數字[:space:]
: 空白字元符號 | 優先權 |
---|---|
\ | 最高 |
()、(?:)、(?=)、[] | 高 |
*、+、?、{n}、{n,}、{n,m} | 中 |
^、$、中介字元 | 低 |
相鄰字元連接 | 次最低 |
| | 最低 |
小菜一碟 要注意 Regular Expression 的 Greedy Mode(貪婪模式)
regex101
wikipedia