[xyz]字符集合。匹配所包含的任意一个字符。例如, '[abc]' 可以
匹配 chr(34)plainchr(34) 中的 'a'。[^xyz]负值字符集合。匹配未包含的任意字符。例如, '[^abc]' 可以
匹配 chr(34)plainchr(34) 中的'p'。[a-z]字符范围。匹配指定范围内的任意字符。例如,'[a-z]' 可以匹
配 'a' 到 'z' 范围内的任意小写字母字符。[^a-z]负值字符范围。匹配任何不在指定范围内的任意字符。例如, 
'[^a-z]' 可以匹配任何不在 'a' 到 'z' 范围内的任意字符。\b匹配一个单词边界,也就是指单词和空格间的位置。例如, 
'er\b' 可以匹配chr(34)neverchr(34) 中的 'er',但不能匹配 chr(34)verbchr(34) 中
的 'er'。\B匹配非单词边界。'er\B' 能匹配 chr(34)verbchr(34) 中的 'er',但不能匹
配 chr(34)neverchr(34) 中的 'er'。\cx匹配由x指明的控制字符。例如, \cM 匹配一个 Control-M 或
回车符。 x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一
个原义的 'c' 字符。\d匹配一个数字字符。等价于 [0-9]。\D匹配一个非数字字符。等价于 [^0-9]。\f匹配一个换页符。等价于 \x0c 和 \cL。 \n匹配一个换行符。等价于 \x0a 和 \cJ。 \r匹配一个回车符。等价于 \x0d 和 \cM。 \s匹配任何空白字符,包括空格、制表符、换页符等等。等价于 
[ \f\n\r\t\v]。 \S匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。 \t匹配一个制表符。等价于 \x09 和 \cI。 \v匹配一个垂直制表符。等价于 \x0b 和 \cK。 \w匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'。 \W匹配任何非单词字符。等价于 '[^A-Za-z0-9_]'。\xn匹配 n,其中 n 为十六进制转义值。十六进制转义值必须为确
定的两个数字长。例如, '\x41' 匹配 chr(34)Achr(34)。'\x041' 则等价
于 '\x04' & chr(34)1chr(34)。正则表达式中可以使用 ASCII 编码。.\num匹配 num,其中num是一个正整数。对所获取的匹配的引用。
例如,'(.)\1' 匹配两个连续的相同字符。\n标识一个八进制转义值或一个后向引用。如果 \n 之前至少 n 
个获取的子表达式,则 n 为后向引用。否则,如果 n 为八进制
数字 (0-7),则 n 为一个八进制转义值。 \nm标识一个八进制转义值或一个后向引用。如果 \nm 之前至少有
is preceded by at least nm 个获取得子表达式,则 nm 为后
向引用。如果 \nm 之前至少有 n 个获取,则 n 为一个后跟文
字 m 的后向引用。如果前面的条件都不满足,若n 和 m 均为
八进制数字 (0-7),则 \nm 将匹配八进制转义值 nm。 \nml如果 n 为八进制数字 (0-3),且 m 和 l 均为八进制数字 (0-
7),则匹配八进制转义值 nml。 \un匹配 n,其中 n 是一个用四个十六进制数字表示的Unicode字
符。例如, \u00A9 匹配版权符号 (?)。 
5.建立正则表达式构造正则表达式的方法和创建数学表达式的方法一样。也就是用多种元字符与操作符将小的表达式结合在一起来创建更大
的表达式。 可以通过在一对分隔符之间放入表达式模式的各种组件来构造一个正则表达式。对 Visual Basic Scripting Edition 而
言,分隔符为一对正斜杠 (/) 字符。例如:/expression/对 VBScript 而言,则采用一对引号 (chr(34)chr(34)) 来确定正则表达式的边界。例如:chr(34)expressionchr(34)在上面所示的两个示例中,正则表达式模式 (expression) 均存储在RegExp 对象的Pattern 属性中。<<------------------------------------------------------>>6.优先权顺序 
在构造正则表达式之后,就可以象数学表达式一样来求值,也就是说,可以从左至右并按照一个优先权顺序来求值。 下表从最高优先级到最低优先级列出各种正则表达式操作符的优先权顺序:操作符描述 \转义符 (), (?:), (?=), []圆括号和方括号 *, +, ?, {n}, {n,}, {n,m}限定符 ^, $, \anymetacharacter位置和顺序 |“或”操作 <<---------------------------------------------------------->>7.普通字符 
普通字符由所有那些未显式指定为元字符的打印和非打印字符组成。这包括所有的大写和小写字母字符,所有数字,所有
标点符号以及一些符号。 最简单的正则表达式是一个单独的普通字符,可以匹配所搜索字符串中的该字符本身。例如,单字符模式 'A' 可以匹配所
搜索字符串中任何位置出现的字母 'A'。这里有一些单字符正则表达式模式的示例:/a/
/7/
/M/等价的 VBScript 单字符正则表达式为:chr(34)achr(34)
chr(34)7chr(34)
chr(34)Mchr(34)可以将多个单字符组合在一起得到一个较大的表达式。例如,下面的 Visual Basic Scripting Edition 正则表达式不是
别的,就是通过组合单字符表达式 'a'、'7'以及 'M' 所创建出来的一个表达式。 /a7M/等价的 VBScript 表达式为:chr(34)a7Mchr(34)请注意这里没有连接操作符。所需要做的就是将一个字符放在了另一个字符后面。<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

解决方案 »

  1.   


    8.特殊字符有不少元字符在试图对其进行匹配时需要进行特殊的处理。要匹配这些特殊字符,必须首先将这些字符转义,也就是在前
    面使用一个反斜杠 (\)。下表给出了这些特殊字符及其含义:特殊字符说明 $匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline
    属性,则 $ 也匹配 '\n' 或 '\r'。要匹配 $ 字符本身,请使用 \$。( )标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。
    要匹配这些字符,请使用 \( 和 \)。 *匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 \*。 +匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 \+。 .匹配除换行符 \n之外的任何单字符。要匹配 .,请使用 \。 标记一个中括号表达式的开始。要匹配 [,请使用 \[。?匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 
    字符,请使用 \?。 \将下一个字符标记为或特殊字符、或原义字符、或后向引用、或八进制
    转义符。例如, 'n' 匹配字符 'n'。'\n' 匹配换行符。序列 '\\' 匹
    配 chr(34)\chr(34),而 '\(' 则匹配 chr(34)(chr(34)。 ^匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示
    不接受该字符集合。要匹配 ^ 字符本身,请使用 \^。 {标记限定符表达式的开始。要匹配 {,请使用 \{。 |指明两项之间的一个选择。要匹配 |,请使用 \|。 
    9.非打印字符有不少很有用的非打印字符,偶尔必须使用。下表显示了用来表示这些非打印字符的转义序列:字符含义 \cx匹配由x指明的控制字符。例如, \cM 匹配一个 Control-M 或回车符。 
    x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 'c' 字 
    符。 \f匹配一个换页符。等价于 \x0c 和 \cL。 \n匹配一个换行符。等价于 \x0a 和 \cJ。 \r匹配一个回车符。等价于 \x0d 和 \cM。 \s匹配任何空白字符,包括空格、制表符、换页符等等。等价于 
    [\f\n\r\t\v]。 \S匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。 \t匹配一个制表符。等价于 \x09 和 \cI。 \v匹配一个垂直制表符。等价于 \x0b 和 \cK。 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>10.字符匹配句点 (.) 匹配一个字符串中任何单个的打印或非打印字符,除了换行符 (\n) 之外。下面的 Visual Basic Scripting 
    Edition 正则表达式可以匹配 'aac'、'abc'、'acc'、'adc'如此等等,同样也可以匹配 'a1c'、'a2c'、a-c'以及 
    a#c': /a.c/等价的 VBScript 正则表达式为:chr(34)a.cchr(34)如果试图匹配一个包含文件名的字符串,其中句点 (.) 是输入字符串的一部分,则可以在正则表达式中的句点前面加上一
    个反斜杠 (\) 字符来实现这一要求。举例来说,下面的 Visual Basic Scripting Edition 正则表达式就能匹
    配 'filename.ext':/filename\.ext/对 VBScript 而言,等价的表达式如下所示:chr(34)filename\.extchr(34)这些表达式仍然是相当有限的。它们只允许匹配任何单字符。很多情况下,对从列表中匹配特殊字符十分有用。例如,如
    果输入文字中包含用数字表示为Chapter 1, Chapter 2诸如此类的章节标题,你可能需要找到这些章节标题。 
    括号表达式可以在一个方括号 ([ 和 ]) 中放入一个或多个单字符,来创建一个待匹配的列表。如果字符被放入括号中括起来,则该
    列表称为括号表达式。括号内和其他任何地方一样,普通字符代表其本身,也就是说,它们匹配输入文字中出现的一处自
    己。大多数特殊字符在位于括号表达式中时都将失去其含义。这里有一些例外: 1.']' 字符如果不是第一项,则将结束一个列表。要在列表中匹配 ']' 字符,请将其放在第一项,紧跟在开始的 '[' 
    后面。2.'\' 仍然作为转义符。要匹配 '\' 字符,请使用 '\\'。 括号表达式中所包含的字符只匹配该括号表达式在正则表达式中所处位置的一个单字符。下面的 Visual Basic 
    Scripting Edition 正则表达式可以匹配 'Chapter 1'、'Chapter 2'、'Chapter 3'、'Chapter 4' 以及 'Chapter 5':/Chapter ][12345]/在 VBScript 中要匹配同样的章节标题,请使用下面的表达式:chr(34)Chapter [12345]chr(34)请注意单词 'Chapter' 及后面的空格与括号内的字符的位置关系是固定的。因此,括号表达式只用来指定满足紧跟在单
    词 'Chapter' 和一个空格之后的单字符位置的字符集合。这里是第九个字符位置。如果希望使用范围而不是字符本身来表示待匹配的字符,则可以使用连字符将该范围的开始和结束字符分开。每个字符的
    字符值将决定其在一个范围内的相对顺序。下面的 Visual Basic Scripting Edition 正则表达式包含了一个等价于上面
    所示的括号列表的范围表达式。/Chapter [1-5]/VBScipt 中相同功能的表达式如下所示:chr(34)Chapter [1-5]chr(34)如果以这种方式指定范围,则开始和结束值都包括在该范围内。有一点特别需要注意的是,在 Unicode 排序中起始值一定
    要在结束值之前。
      

  2.   

    如果已知章节数限制只有99 章,则可以使用下面的 Visual Basic Scripting Edition 表达式来指定至少有一位数字,但
    不超过两个数字。/Chapter [0-9]{1,2}/对 VBScript 可以使用下述正则表达式:chr(34)Chapter [0-9]{1,2}chr(34)上述表达式的缺点是如果有一个章节号大于 99,它仍只会匹配前两位数字。另一个缺点是某些人可以创建一个 Chapter 
    0,而且仍能匹配。一个更好的用来匹配两位数的 Visual Basic Scripting Edition 表达式如下:/Chapter [1-9][0-9]?/或者/Chapter [1-9][0-9]{0,1}/对 VBScript 而言,下述表达式与上面等价:chr(34)Chapter [1-9][0-9]?chr(34)或者chr(34)Chapter [1-9][0-9]{0,1}chr(34)'*'、 '+'和 '?' 限定符都称之为贪婪的,也就是说,他们尽可能多地匹配文字。有时这根本就不是所希望发生的情况。
    有时则正好希望最小匹配。 例如,你可能要搜索一个 HTML 文档来查找一处包含在 H1 标记中的章节标题。在文档中该文字可能具有如下形式:Chapter 1 – Introduction to Regular Expressions
    下面的表达式匹配从开始的小于号 (<) 到 H1 标记结束处的大于号之间的所有内容。/<.*>/VBScript 的正则表达式为:chr(34)<.*>chr(34)如果所要匹配的就是开始的 H1 标记,则下述非贪婪地表达式就只匹配 。/<.*?>/或者chr(34)<.*?>chr(34)通过在 '*'、 '+' 或 '?' 限定符后放置 '?',该表达式就从贪婪匹配转为了非贪婪或最小匹配。
    12.定位符到现在为止,所看到的示例都只考虑查找任何地方出现的章节标题。出现的任何一个字符串 'Chapter' 后跟一个空格和一
    个数字可能是一个真正的章节标题,也可能是对其他章节的交叉引用。由于真正的章节标题总是出现在一行的开始,因此
    需要设计一个方法只查找标题而不查找交叉引用。定位符提供了这个功能。定位符可以将一个正则表达式固定在一行的开始或结束。也可以创建只在单词内或只在单词的开
    始或结尾处出现的正则表达式。下表包含了正则表达式及其含义的列表:字符描述 ^匹配输入字符串的开始位置。如果设置了RegExp对象的 Multiline 属性,
    ^ 也匹配 '\n' 或 '\r' 之后的位置。 $匹配输入字符串的结束位置。如果设置了RegExp对象的 Multiline 属性,
    $ 也匹配 '\n' 或 '\r' 之前的位置。 \b匹配一个单词边界,也就是指单词和空格间的位置。 \B匹配非单词边界。 
    不能对定位符使用限定符。因为在一个换行符或者单词边界的前面或后面不会有连续多个位置,因此诸如 '^*' 的表达式
    是不允许的。要匹配一行文字开始位置的文字,请在正则表达式的开始处使用 '^' 字符。不要把 '^' 的这个语法与其在括号表达式中
    的语法弄混。它们的语法根本不同。 要匹配一行文字结束位置的文字,请在正则表达式的结束处使用 '$' 字符。要在查找章节标题时使用定位符,下面的 Visual Basic Scripting Edition 正则表达式将匹配位于一行的开始处最多有
    两个数字的章节标题:/^Chapter [1-9][0-9]{0,1}/VBScript 中相同功能的正则表达式如下:chr(34)^Chapter [1-9][0-9]{0,1}chr(34)一个真正的章节标题不仅出现在一行的开始,而且这一行中也仅有这一个内容,因此,它必然也位于一行的结束。下面的
    表达式确保所指定的匹配只匹配章节而不会匹配交叉引用。它是通过创建一个只匹配一行文字的开始和结束位置的正则表
    达式来实现的。/^Chapter [1-9][0-9]{0,1}$/对 VBScript 则使用:chr(34)^Chapter [1-9][0-9]{0,1}$chr(34)匹配单词边界有少许不同,但却给正则表达式增加了一个非常重要的功能。单词边界就是单词和空格之间的位置。非单词
    边界就是其他任何位置。下面的 Visual Basic Scripting Edition 表达式将匹配单词 'Chapter' 的前三个字符,因为它
    们出现在单词边界后:/\bCha/对 VBScript 为:chr(34)\bChachr(34)这里 '\b' 操作符的位置很关键。如果它位于要匹配的字符串的开始,则将查找位于单词开头处的匹配;如果它位于改字
    符串的末尾,则查找位于单词结束处的匹配。例如,下面的表达式将匹配单词 'Chapter' 中的 'ter',因为它出现在单词
    边界之前:/ter\b/以及chr(34)ter\bchr(34)下面的表达式将匹配 'apt',因为它位于 'Chapter' 中间,但不会匹配 'aptitude' 中的'apt':/\Bapt/以及chr(34)\Baptchr(34)
      

  3.   

    这是因为在单词 'Chapter' 中 'apt' 出现在非单词边界位置,而在单词 'aptitude' 中位于单词边界位置。非单词边界
    操作符的位置不重要,因为匹配与一个单词的开头或结尾无关14.后向引用正则表达式一个最重要的特性就是将匹配成功的模式的某部分进行存储供以后使用这一能力。请回想一下,对一个正则表
    达式模式或部分模式两边添加圆括号将导致这部分表达式存储到一个临时缓冲区中。可以使用非捕获元字符 '?:', '?=', 
    or '?!' 来忽略对这部分正则表达式的保存。所捕获的每个子匹配都按照在正则表达式模式中从左至右所遇到的内容存储。存储子匹配的缓冲区编号从 1 开始,连续编
    号直至最大 99 个子表达式。每个缓冲区都可以使用 '\n' 访问,其中 n 为一个标识特定缓冲区的一位或两位十进制
    数。 后向引用一个最简单,最有用的应用是提供了确定文字中连续出现两个相同单词的位置的能力。请看下面的句子:Is is the cost of of gasoline going up up?根据所写内容,上面的句子明显存在单词多次重复的问题。如果能有一种方法无需查找每个单词的重复现象就能修改该句
    子就好了。下面的 Visual Basic Scripting Edition 正则表达式使用一个子表达式就可以实现这一功能。 /\b([a-z]+) \1\b/gi等价的 VBScript 表达式为:chr(34)\b([a-z]+) \1\bchr(34)在这个示例中,子表达式就是圆括号之间的每一项。所捕获的表达式包括一个或多个字母字符,即由'[a-z]+' 所指定的。
    该正则表达式的第二部分是对前面所捕获的子匹配的引用,也就是由附加表达式所匹配的第二次出现的单词。'\1'用来指
    定第一个子匹配。单词边界元字符确保只检测单独的单词。如果不这样,则诸如 chr(34)is issuedchr(34) 或 chr(34)this ischr(34) 这样的短语
    都会被该表达式不正确地识别。 在 Visual Basic Scripting Edition 表达式中,正则表达式后面的全局标志 ('g') 表示该表达式将用来在输入字符串中
    查找尽可能多的匹配。大小写敏感性由表达式结束处的大小写敏感性标记 ('i') 指定。多行标记指定可能出现在换行符的
    两端的潜在匹配。对 VBScript 而言,在表达式中不能设置各种标记,但必须使用 RegExp 对象的属性来显式设置。使用上面所示的正则表达式,下面的 Visual Basic Scripting Edition 代码可以使用子匹配信息,在一个文字字符串中
    将连续出现两次的相同单词替换为一个相同的单词:var ss = chr(34)Is is the cost of of gasoline going up up?.\nchr(34);
    var re = /\b([a-z]+) \1\b/gim;//创建正则表达式样式.
    var rv = ss.replace(re,chr(34)$1chr(34));//用一个单词替代两个单词.最接近的等价VBScript 代码如下:Dim ss, re, rv
    ss = chr(34)Is is the cost of of gasoline going up up?.chr(34) & vbNewLine
    Set re = New RegExp
    re.Pattern = chr(34)\b([a-z]+) \1\bchr(34)
    re.Global = True
    re.IgnoreCase = True
    re.MultiLine = True
    rv = re.Replace(ss,chr(34)$1chr(34))请注意在 VBScript 代码中,全局、大小写敏感性以及多行标记都是使用 RegExp 对象的适当属性来设置的。在replace 方法中使用 $1 来引用所保存的第一个子匹配。如果有多个子匹配,则可以用 $2, $3 等继续引用。后向引用的另一个用途是将一个通用资源指示符 (URI) 分解为组件部分。假定希望将下述的URI 分解为协议 (ftp, 
    http, etc),域名地址以及页面/路径:http://msdn.microsoft.com:80/scripting/default.htm下面的正则表达式可以提供这个功能。对 Visual Basic Scripting Edition,为:/(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)/对 VBScript 为:chr(34)(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)chr(34)第一个附加子表达式是用来捕获该 web 地址的协议部分。该子表达式匹配位于一个冒号和两个正斜杠之前的任何单词。第
    二个附加子表达式捕获该地址的域名地址。该子表达式匹配不包括 '^'、 '/' 或 ':' 字符的任何字符序列。第三个附加
    子表达式捕获网站端口号码,如果指定了该端口号。该子表达式匹配后跟一个冒号的零或多个数字。最后,第四个附加子
    表达式捕获由该 web 地址指定的路径以及\或者页面信息。该子表达式匹配一个和多个除'#' 或空格之外的字符。将该正则表达式应用于上面所示的 URI 后,子匹配包含下述内容:RegExp.$1 包含 chr(34)httpchr(34)RegExp.$2 包含 chr(34)msdn.microsoft.comchr(34)RegExp.$3 包含 chr(34):80chr(34)RegExp.$4 包含 chr(34)/scripting/default.htmchr(34)