1. 程式人生 > >3.2.1 什麽是正則表達式

3.2.1 什麽是正則表達式

特殊字符 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 等。
正因為正則表達式對於UNIX的使用是這麽重要,所以花些時間把它們弄熟絕對不會錯,越早開始就能掌握得越好。 從根本上來看,正則表達式是由兩個基本組成部分所建立:一般字符與特殊字符。一般字符指的是任何沒有特殊意義的字符,正如下表中所定義的。在某些情況下,特殊字符也可以視為一般字符。特殊字符常稱為元字符( metacharacter ),本章接下來的部分都會以 meta 字符表示。 POSIX BRE 與 ERE 的 meta 字符
字符 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 什麽是正則表達式