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