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/;
通过使用元字符, 你可以创建各类的表达式来为任何类型的字符, 包括: 整数, 英文字母, 空格字符, 或者它们的反值等。这样子你就可以建立各种强大而精炼的正则表达式。