15.11.1 問題
怎樣在一個正則表達式中對一些字符類型如(整數, 字符, 空格以及它們的反值)進行匹配?
15.11.2 解決辦法
可以通過字符類型標記來實行。
15.11.3 討論
通過使用字符類來進行字符匹配一種容易且非常有效的方法。首先, 我們需要建一個包含”/”號的字符類型標記, 它是用來告訴正則表達式處理引擎接下來的字符是一個字符類型而非普通字符。然后, 在”/”號后加上所需的字符類。要注意的是, 很多字符類型都包含著反值。例如:
/d 表示對數目字進行匹配, 等同于[0-9]
/D 表示對任何非數目字進行匹配, 等同于[^0-9]
/b 表示對一個單詞字符及非單詞字符之間的內容進行匹配, 即一個字符串中的開頭或結尾的字符為為單詞字符的話, 它就會對這個字符串的開頭或結尾進行匹配。
/B 表示對兩個單詞字符或兩個非單詞字符之間的內容進行匹配。
/f 表示對格式饋送類的字符進行匹配。
/n 表示對所有換行的字符進行匹配。
/r 對返回的字符進行匹配。
/s 對任何空白的字符進行匹配, 包括(space, tab, 換行等)。
/S 對任何非空白的字符進行匹配。
/t 對tab 鍵的字符進行匹配。
/unnnn 用來對Unicode 編碼的字符進行匹配, 當中nnnn 是代表一個十六進制的字符碼。例如: /u263a 就代表一個笑臉的符號。
/v 對垂直饋入的字符進行匹配。
/w 對所有單詞字符, 包括(A–Z, a–z, 0–9, or _) 進行匹配。注意, 不包括任何非英語的字符,例如: é, ?, 或?等。
/W 對所有非單詞字符進行匹配。
/xnn 對特定的ASCII 編碼的字符進行匹配, 其中nn 是一個十六進制的字符碼。
/ 用以分隔含有特別意義的元字符。
. (點號) 對單個字符進行匹配。如果要以”.”號來為換行字符”/n”進行匹配的話, “s”(意即dotall)這個標記一個要預先設定好。詳細情況請參考Flex 使用文檔中有關”s”(dotall)的部份。
以下的例子展示了有關元字符的用法:
對”1”及兩個隨后的單詞字符進行匹配的話, 可以這樣做:
/1/w/w/;
對”1”及兩個隨后的非單詞字符進行匹配的話, 可以這樣做:
/1/W/W/;
對5 個連續的數目字進行匹配的話, 可以這樣做:
//d/d/d/d/d/;
雖然這樣做會比較方便一點:
//d{5}/;
如果兩個數目字之間存在空格的話, 可以這樣做:
//d/b/d/;
如果三個數目字之間被某一個字符分隔開的話, 可以這樣做:
//d./d./d/;
通過使用元字符, 你可以創建各類的表達式來為任何類型的字符, 包括: 整數, 英文字母, 空格字符, 或者它們的反值等。這樣子你就可以建立各種強大而精煉的正則表達式。