3.2.1 什麽是正則表達式
阿新 • • 發佈:2019-01-23
特殊字符 nbsp 個數 至少 換行 查找 存儲 排序 str
正則表達式是一種表示方式,讓你可以查找匹配特定準則的文本,例如,“以字母 a 開頭”。此表示法讓你可以寫一個表達式,選定或匹配多個數據字符串。
很多的UNIX工具程序沿用某一種正則表達式形式來強化本身的功能。這裏列舉一部分例子:
簡單的正則表達式匹配範例
- 用來尋找匹配文本行的 grep 工具族:grep 與 egrep ,以及非標準但很好用的 agrep 工具。
- 用來改變輸入流的 sed 流編輯器( stream editor ),本章稍後將會介紹。
- 字符串處理程序語言,例如 awk、Icon、Perl、Python、Ruby、Tcl等。
- 文件查看程序(有時稱為分頁程序,pagers ),例如 more、page、與 pg ,都常出現在商用UNIX系統上,另外還有 less分頁程序。
- 文本編輯器,例如歷史悠久的 ed 編輯器、標準的 vi 屏幕編輯器,還有一些插件(add-on)編輯器,例如 emacs、jed、jove、vile、vim 等。
字符 | BRE/ERE | 模式含義 |
\ | 兩者都可 | 通常用以關閉後續字符的特殊意義。有時則是相反地打開後續字符的特殊意義,例如 \( ... \) 與 \{ ... \} 。 |
. | 兩者都可 | 匹配任何單個的字符,但 NUL 除外。獨立程序也可以不允許匹配換行字符。 |
* | 兩者都可 | 匹配在它之前的任何數目(或沒有)的單個字符。以ERE而言,此前置字符可以是正則表達式, .* 代表“匹配任一字符的任一長度”。以BRE來說, * 若置於正則表達式的第一個字符,不具任何特殊意義。 |
^ | 兩者都可 | 匹配緊接著的正則表達式,在行或字符串的起始處。BRE:僅在正則表達式的開頭處具此特殊含義,ERE:置於任何位置都具特殊含義。 |
$ | 兩者都可 | 匹配前面的正則表達式,在字符串或行結尾處。BRE:僅在正則表達式結尾處具此特殊含義,RER:置於任何位置都具特殊含義。 |
[...] | 兩者都可 | 方括號表達式,匹配方括號內的任一字符。連字符(-)指的是連續字符的範圍。^符號置於方括號裏第一個字符則有反向含義:指的是匹配不在列表內的任何字符。作為首字符的一個連字符或是結束方括號(]),則被視為列表的一部分。所有其他的 meat 字符也為列表的一部分。房括號表達式裏可能會含有排序符號、等價字符集、以及字符集。 |
字符 | BRE/ERE | 模式含義 |
\ {n,m \} | BRE | 區間表達式,匹配在它前面的單個字符重現的次數區間。\{n\}指的是重現 n 次;\{n,\}則為至少重現 n 次,而\{n,m\}為重現 n 至 m 次。m的值必須介於0至255間 |
\ ( \) | BRE | 將\( 與 \) 間的模式存儲在特殊的“保留空間”。最多可以將9個獨立的子模式存儲在單個模式中。匹配於子模式的文本,可以通過轉移序列\1至\9,被重復使用在相同模式裏,例如\(ab\).*\1,指的是匹配於ab組合的兩次重現,中間可存在任何數目的字符。 |
\n | BRE | 重復在\ 方括號內第 n 個子模式至此點的模式。n為1至9的數字,1為由左開始。 |
{n,m} | ERE | 與先前提及BRE的\{n,m\}一樣,只不過方括號前沒有反斜杠。 |
+ | ERE | 匹配前面正則表達式的一個或多個實例。 |
? | ERE | 匹配前面正則表達式的零個或一個實例。 |
| | ERE | 匹配於|符號前或後的正則表達式。 |
( ) | ERE | 匹配於方括號括起來的正則表達式群。 |
表達式 | 匹配 |
tolstoy | 位於一行上任何位置的7個字母:tolstoy |
^tolstoy | 7個字母tolstoy,出現在一行的開頭 |
tolstoy$ | 7個字母tolstoy,出現在一行的結尾 |
^tolstoy$ | 正好包括tolstoy這7個字母的一行,沒有其他的任何字符 |
[Tt]olstoy | 在一行上的任意位置中,含有 Tolstoy 或是 tolstoy |
tol.toy | 在一行上的任意位置中,含有 tol 這3個字母,加上任何一個字符,再接著toy這3個字母。 |
tol.*toy | 在一行上的任意位置中,含有 tol 這3個字母,加上任意的0或多個字符,再繼續 toy 這3個字母。 |
3.2.1 什麽是正則表達式