正則表示式/POSIX 擴充套件正則表示式
外觀
< 正則表示式
更高階的“擴充套件”正則表示式有時可以透過包含命令列標誌“-E”在 Unix 工具中使用。其他 Unix 工具,如 awk,預設使用它。
主要區別在於一些反斜槓被移除:\{…\} 變為{…}以及 \(…\) 變為(…). 例子
- "
[hc]+at" 與以下內容匹配:hat", "cat", "hhat", "chat", "hcat", "ccchat" 等。 - "
[hc]?at" 與以下內容匹配:hat", "cat" 和 "at" - "
([cC]at)|([dD]og)" 與以下內容匹配:cat", "Cat", "dog" 和 "Dog"
字元(,),[,],.,*,?,+,|,^和$是特殊符號,必須使用反斜槓符號進行轉義才能被視為文字字元。例如
- "
a\.(\(|\))" 與字串 " 匹配a.)" 或 "a.("
現代正則表示式工具允許將量詞指定為非貪婪的,方法是在量詞後新增問號:(\[\[.*?\]\]).
以下元字元被使用
| 元字元 | 描述 |
|---|---|
.
|
匹配任何單個字元(許多應用程式不包括換行符,並且哪些字元被視為換行符是特定於風格、字元編碼和平臺的,但可以安全地假設換行符包含在內)。在 POSIX 方括號表示式中,點字元匹配一個文字點。例如,a.c 匹配 "abc" 等,但 [a.c] 僅匹配 "a"、"." 或 "c"。 |
[ ]
|
方括號表示式。匹配方括號內包含的單個字元。例如,[abc] 匹配 "a"、"b" 或 "c"。[a-z] 指定一個範圍,匹配從 "a" 到 "z" 的任何小寫字母。這些形式可以混合使用:[abcx-z] 匹配 "a"、"b"、"c"、"x"、"y" 或 "z",[a-cx-z] 也是如此。
|
[^ ]
|
匹配方括號內不包含的單個字元。例如,[^abc] 匹配除 "a"、"b" 或 "c" 之外的任何字元。[^a-z] 匹配任何不是從 "a" 到 "z" 的小寫字母的單個字元。如上所述,文字字元和範圍可以混合使用。 |
^
|
匹配字串內的起始位置。線上性工具中,它匹配任何行的起始位置。 |
$
|
匹配字串的結束位置或字串結束換行符之前的正位置。線上性工具中,它匹配任何行的結束位置。 |
BRE: \( \)ERE: ( )
|
定義一個標記的子表示式。括號內匹配的字串可以稍後被呼叫(參見下一項,\n)。標記的子表示式也稱為塊或捕獲組。 |
\n
|
匹配第 n 個標記的子表示式所匹配的內容,其中 n 是從 1 到 9 的數字。從理論上講,這個結構是不規則的,並且沒有在 POSIX ERE 語法中採用。一些工具允許引用超過九個捕獲組。 |
*
|
匹配前面的元素零次或多次。例如,ab*c 匹配 "ac"、"abc"、"abbbc" 等。[xyz]* 匹配 ""、"x"、"y"、"z"、"zx"、"zyx"、"xyzzy" 等。\(ab\)*(在 BRE 中)或 (ab)*(在 ERE 中)匹配 ""、"ab"、"abab"、"ababab" 等。 |
BRE: \+ERE: +
|
匹配前面的元素一次或多次。例如,ab\+c(在 BRE 中)或 ab+c(在 ERE 中)匹配 "abc"、"abbbc" 等,但不匹配 "ac",[xyz]\+(在 BRE 中)或 [xyz]+(在 ERE 中)匹配 "x"、"y"、"z"、"zx"、"zyx"、"xyzzy" 等。\(ab\)\+(在 BRE 中)或 (ab)+(在 ERE 中)匹配 "ab"、"abab"、"ababab" 等。 |
BRE: \?ERE: ?
|
匹配前面的元素一次或零次。例如,ab\?c(在 BRE 中)或 ab?c(在 ERE 中)匹配 "ac" 或 "abc",而 \(ab\)\?(在 BRE 中)或 (ab)?(在 ERE 中)匹配 "" 或 "ab"。 |
BRE: \|ERE: |
|
匹配前面的元素或後面的元素。例如,abc\|def(在 BRE 中)或 abc|def(在 ERE 中)匹配 "abc" 或 "def"。 |
BRE: \{m,n\}ERE: {m,n}
|
匹配前面的元素至少 m 次,但不超過 n 次。例如,a\{3,5\}(在 BRE 中)或 a{3,5}(在 ERE 中)僅匹配 "aaa"、"aaaa" 和 "aaaaa"。 |
BRE: \{m\}ERE: {m}
|
匹配前面的元素正好 m 次。 |
BRE: \{m,\}ERE: {m,}
|
匹配前面的元素至少 m 次。 |
BRE: \{,n\}ERE: {,n}
|
匹配前面的元素不超過 n 次。例如,ba\{,2\}b(在 BRE 中)或 ba{,2}b(在 ERE 中)僅匹配 "bb"、"bab" 和 "baab"。 |
POSIX 標準定義了一些字元類或類別,如下表所示
| POSIX 類 | 類似於 | 含義 |
|---|---|---|
| [:upper:] | [A-Z] | 大寫字母 |
| [:lower:] | [a-z] | 小寫字母 |
| [:alpha:] | [[:upper:][:lower:]] | 大寫和小寫字母 |
| [:alnum:] | [[:alpha:][:digit:]] | 數字、大寫和小寫字母 |
| [:digit:] | [0-9] | 數字 |
| [:xdigit:] | [0-9A-Fa-f] | 十六進位制數字 |
| [:punct:] | [.,!?:…] | 標點符號 |
| [:blank:] | [ \t] | 僅空格和製表符字元 |
| [:space:] | [ \t\n\r\f\v] | 空白(空格)字元 |
| [:cntrl:] | 控制字元 | |
| [:graph:] | [^\t\n\r\f\v] | 列印字元 |
| [:print:] | [^ \t\n\r\f\v] | 列印字元和空格 |
連結
- W:正則表示式#字元類
- 始終支援的字元類 在 boost.org 上
使用這種正則表示式語法的工具和語言包括
- AWK - 使用擴充套件正則表示式語法的超集
- POSIX 基本正則表示式 在 regular-expressions.info 上
- POSIX 擴充套件正則表示式語法 在 boost.org 上