ASP.NET 中的正则表达式(3)

要指定任何数值数字,可以使用字符类 [0123456789]。但是,由于这样使用字符不大方便,所以要通过在括号中使用连字符 - 来定义字符的范围。连字符在字符类中有特殊的含义(不是在正则表达式中,因此,准确地说它不能叫正则表达式元字符),且仅在连字符不是第一个字符时,连字符才在字符类中有特殊含义。要使用连字符指定任何数值数字,可以使用 [0-9]。小写字母也一样,可以使用 [a-z],大写字母可以使用 [A-Z]。连字符定义的范围取决于使用的字符集。因此,字符在(例如)ASCII 或 Unicode 表中出现的顺序确定了在范围中包括的字符。如果需要在范围中包括连字符,将它指定为第一个字符。例如:[-.?] 将匹配 4 个字符中任何一个字符(注意,最后的字符是个空格)。另请注意,正则表达式元字符在字符类中不做特殊处理,所以这些元字符不需要转义。考虑到字符类是与其他正则表达式语言分开的一种语言,因此字符类有自己的规则和语法。

如果使用字符 ^ 作为字符类的第一个字符来否定此类,也可以匹配字符类成员以外的任何字符。因此,要匹配任何非元音字符,可以使用字符类 [^aAeEiIoOuU]。注意,如果要否定连字符,应将连字符作为字符类的第二个字符,如 [^-]。记住,^ 在字符类中的作用与它在正则表达式模式中的作用完全不同。
下面列出操作中使用的一些字符类。

模式 输入(匹配) 
^b[aeiou]t$
 Bat、bet、bit、bot、but

^[0-9]{5}$
 11111, 12345, 99999

^c:\\
 c:\windows、c:\\\\\、c:\foo.txt、c:\ 后跟任何其他内容

abc$
 abc、123abc、以 abc 结束的任意字符串

(abc){2,3}
 abcabc、abcabcabc

^[^-][0-9]$
 0、1、2、... (不匹配 -0、-1、 -2 等)


在 .NET Framework 的下一版中,代码名“Whidbey”作为一种新功能被添加到字符类中,称作字符类差 (character class subtraction)。它的主要作用是,允许从一个字符类中减去另一个字符类,可提供更可读的方式描述某些模式。该规范可通过以下地址访问:


CharacterClassSubtraction.doc。它的语法类似 [a-z-[aeiou]],匹配所有的小写辅音字母。

预定义的集合元字符

使用目前提供的工具可以完成很多工作。但是,要使用 [0-9] 表示模式中的每个数值数字,或(更糟)使用 [0-9a-zA-Z]表示任何字母数字字符,还有一段相当漫长的过程。为了减轻处理这些常用但冗长模式的痛苦,事先定义了预定义元字符集合。正则表达式的不同实现定义了不同的预定义元字符集合,下面描述的预定义元字符集合在 .NET Framework 中得到 System.Text.RegularExpressions API 的支持。这些预定义元字符的标准语法是,在反斜杠 \ 后跟一个或多个字符。多数预定义元字符只有一个字符,它们的使用很容易,是冗长字符类的理想替代字符。以下是两个示例:\d 匹配所有数值数字,\w 匹配所有单词字符(字母数字加下划线)。例外情况是一些特定字符代码匹配,此时必须指定所匹配字符的地址,如 \u000D 将匹配 Unicode 回车符。下面列出一些最常用的字符类及其等效的元字符。

元字符   等效字符类  

\a

 

匹配铃声(警报);\u0007

 

\b

 

匹配字符类外的字边界,它匹配退格字符,\u0008

 

\t

 

匹配制表符,\u0009

 

\r

 

匹配回车符,\u000D

 

\w

 

匹配垂直制表符,\u000B

 

\f

 

匹配换页符,\u000C

 

\n

 

匹配新行,\u000A

 

\e

 

匹配转义符,\u001B

 

\040

 

匹配 3 位 8 进制 ASCII 字符。\040 表示空格(十进制数 32)。

 

\x20

 

使用 2 位 16 进制数匹配 ASCII 字符。此例中,\x2- 表示空格。

 

\cC

 

匹配 ASCII 控制字符,此例中是 ctrl-C。

 

\u0020

 

使用 4 位 16 进制数匹配 Unicode 字符。此例中 \u0020 是空格。

 

\*

 

不代表预定义字符类的任意字符都只作为该字符本身对待。因此,\* 等同于 \x2A(是文字 *,不是 * 元字符)。

 

\p{name}

 

匹配已命名字符类“name”中的任意字符。支持名称是 Unicode 组和块范围。例如,Ll、Nd、Z、IsGreek、IsBoxDrawing 和 Sc(货币)。

 

\p{name}

 

匹配已命名字符类“name”中不包括的文本。

 

\w

 

匹配任意单词字符。对于非 Unicode 和 ECMAScript 实现,这等同于 [a-zA-Z_0-9]。在 Unicode 类别中,这等同于 [\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Pc}]

 

\W

 

\w 的否定,等效于 ECMAScript 兼容集合 [^a-zA-Z_0-9] 或 Unicode 字符类别 [^\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Pc}]

 

\s

 

匹配任意空白区域字符。等效于 Unicode 字符类 [\f\n\r\t\v\x85\p{Z}]。如果使用 ECMAScript 选项指定 ECMAScript 兼容方式,\s 等效于 [ \f\n\r\t\v] (请注意前导空格)。

 

\S

 

匹配任意非空白区域字符。等效于 Unicode 字符类别 [^\f\n\r\t\v\x85\p{Z}]。如果使用 ECMAScript 选项指定 ECMAScript 兼容方式,\S 等效于 [^ \f\n\r\t\v] (请注意 ^ 后的空格)。

 

\d

 

匹配任意十进制数字。在 ECMAScript 方式下,等效于 Unicode 的 [\p{Nd}]、非 Unicode 的 [0-9]

 

\D

 

匹配任意非十进制数字。在 ECMAScript 方式下,等效于 Unicode 的 [\p{Nd}]、非 Unicode 的 [^0-9]

 

表达式示例

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wfzyxx.html