VBS教程:正则表达式简介 -后向引用_vbs

后向引用

正则表达式一个最重要的特性就是将匹配成功的模式的某部分进行存储供以后使用这一能力。请回想一下,对一个正则表达式模式或部分模式两边添加圆括号将导致这部分表达式存储到一个临时缓冲区中。可以使用非捕获元字符 '?:', '?=', 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 表达式为:

"\b([a-z]+) \1\b"

在这个示例中,子表达式就是圆括号之间的每一项。所捕获的表达式包括一个或多个字母字符,即由'[a-z]+' 所指定的。该正则表达式的第二部分是对前面所捕获的子匹配的引用,也就是由附加表达式所匹配的第二次出现的单词。'\1'用来指定第一个子匹配。单词边界元字符确保只检测单独的单词。如果不这样,则诸如 "is issued" 或 "this is" 这样的短语都会被该表达式不正确地识别。

在 Visual Basic Scripting Edition 表达式中,正则表达式后面的全局标志 ('g') 表示该表达式将用来在输入字符串中查找尽可能多的匹配。大小写敏感性由表达式结束处的大小写敏感性标记 ('i') 指定。多行标记指定可能出现在换行符的两端的潜在匹配。对 VBScript 而言,在表达式中不能设置各种标记,但必须使用 RegExp 对象的属性来显式设置。

使用上面所示的正则表达式,下面的 Visual Basic Scripting Edition 代码可以使用子匹配信息,在一个文字字符串中将连续出现两次的相同单词替换为一个相同的单词:

var ss = "Is is the cost of of gasoline going up up?.\n";var re = /\b([a-z]+) \1\b/gim;       //创建正则表达式样式.var rv = ss.replace(re,"$1");   //用一个单词替代两个单词.

最接近的等价  VBScript 代码如下:

Dim ss, re, rvss = "Is is the cost of of gasoline going up up?." & vbNewLineSet re = New RegExpre.Pattern = "\b([a-z]+) \1\b"re.Global = Truere.IgnoreCase = Truere.MultiLine = Truerv = re.Replace(ss,"$1")

请注意在 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 为:

"(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)"

第一个附加子表达式是用来捕获该 web 地址的协议部分。该子表达式匹配位于一个冒号和两个正斜杠之前的任何单词。第二个附加子表达式捕获该地址的域名地址。该子表达式匹配不包括 '^'、 '/' 或 ':' 字符的任何字符序列。第三个附加子表达式捕获网站端口号码,如果指定了该端口号。该子表达式匹配后跟一个冒号的零或多个数字。最后,第四个附加子表达式捕获由该 web 地址指定的路径以及\或者页面信息。该子表达式匹配一个和多个除'#' 或空格之外的字符。

将该正则表达式应用于上面所示的 URI 后,子匹配包含下述内容:

RegExp.$1 包含 "http"

RegExp.$2 包含 "msdn.microsoft.com"

RegExp.$3 包含 ":80"

RegExp.$4 包含 "/scripting/default.htm"

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索vbs引用变量、vbs脚本引用变量、vbs执行几次后退出、vbs10秒后重启代码、正则表达式 后向引用,以便于您获取更多的相关知识。

时间: 2024-09-16 04:46:09

VBS教程:正则表达式简介 -后向引用_vbs的相关文章

VBS教程:正则表达式简介 -后向引用

  后向引用 正则表达式一个最重要的特性就是将匹配成功的模式的某部分进行存储供以后使用这一能力.请回想一下,对一个正则表达式模式或部分模式两边添加圆括号将导致这部分表达式存储到一个临时缓冲区中.可以使用非捕获元字符 '?:', '?=', or '?!' 来忽略对这部分正则表达式的保存. 所捕获的每个子匹配都按照在正则表达式模式中从左至右所遇到的内容存储.存储子匹配的缓冲区编号从 1 开始,连续编号直至最大 99 个子表达式.每个缓冲区都可以使用 'n' 访问,其中 n 为一个标识特定缓冲区的一

VBS教程:正则表达式简介 -选择与编组_vbs

选择与编组 选择允许使用 '|' 字符来在两个或多个候选项中进行选择.通过扩展章节标题的正则表达式,可以将其扩充为不仅仅适用于章节标题的表达式.不过,这可没有想象的那么直接.在使用选择时,将匹配'|' 字符每边最可能的表达式.你可能认为下面的 Visual Basic Scripting Edition 和 VBScript 表达式将匹配位于一行的开始和结束位置且后跟一个或两个数字的 'Chapter' 或 'Section': /^Chapter|Section [1-9][0-9]{0,1}

VBS教程:正则表达式简介 -非打印字符_vbs

非打印字符 有不少很有用的非打印字符,偶尔必须使用.下表显示了用来表示这些非打印字符的转义序列: 字符 含义 \cx 匹配由x指明的控制字符.例如, \cM 匹配一个 Control-M 或回车符. x 的值必须为 A-Z 或 a-z 之一.否则,将 c 视为一个原义的 'c' 字符. \f 匹配一个换页符.等价于 \x0c 和 \cL. \n 匹配一个换行符.等价于 \x0a 和 \cJ. \r 匹配一个回车符.等价于 \x0d 和 \cM. \s 匹配任何空白字符,包括空格.制表符.换页符等

VBS教程:VBscript属性-Pattern 属性_vbs

Pattern 属性 设置或返回被搜索的正则表达式模式. object.Pattern [= "searchstring"] 参数 object 必选项.总是一个 RegExp 对象变量. searchstring 可选项的.被搜索的正则字符串表达式.它可能包含设置部分表格中的各种正则表达式字符. 设置 在书写正则表达式的模式时使用了特殊的字符和序列.下表描述了可以使用的字符和序列,并给出了实例. 字符 描述 \ 将下一个字符标记为特殊字符或字面值.例如"n"与字符

VBS教程:VBscript语句-Private 语句_vbs

Private 语句 定义私有变量并分配存储空间.在 Class块中定义私有变量. Private varname[([subscripts])][, varname[([subscripts])]] . . . 参数 varname 变量的名称:遵循标准变量命名约定. subscripts 数组变量的维数,最多可以声明 60 维的数组.subscripts 参数使用下列语法: upper [, upper] . . . 数组的下界总是 0. 说明 Private 语句变量只能在声明该变量的脚本

VBS教程:VBScript 语句-Public 语句_vbs

Public 语句 定义公有变量并分配存储空间.在 Class 块中定义私有变量. Public varname[([subscripts])][, varname[([subscripts])]] . . . 参数 varname 变量的名称,遵循标准变量命名约定. subscripts 数组变量的维数:最多可以声明 60 维的数组. subscripts 参数使用下列语法: upper [,upper] . . . 数组的下界总是 0. 说明 Public语句变量可用于全部脚本中的所有过程.

VBS教程:VBScript 语句-Set 语句_vbs

Set 语句 将对象引用赋给一个variable或property,或者将对象引用与事件关联. Set objectvar = {objectexpression | New classname | Nothing} -或者- Set object.eventname = GetRef(procname) 参数 objectvar 必选项,变量或属性名称;符合标准变量命名约定. objectexpression 可选项,与对象名称一致的Expression,另一个相同object type.函数

VBS教程:方法-Add 方法(Dictionary)_vbs

Add 方法(Dictionary) 向 Dictionary 对象添加键和项目对. object.Add key, item 参数 object 必选项.应为 Dictionary 对象的名称. key 必选项.与添加的 item 相关的 key. item 必选项.与添加的 key 相关的 item. 说明 如果 key 已经存在,则会出现错误. 下面例子举例说明如何使用 Add 方法: Dim d '创建变量.Set d = CreateObject("Scripting.Dictiona

VBS教程:VBScript 基础-VBScript 过程_vbs

VBScript 过程 在 VBScript 中,过程被分为两类:Sub 过程和 Function 过程. Sub 过程 Sub 过程是包含在 Sub 和 End Sub 语句之间的一组 VBScript 语句,执行操作但不返回值.Sub 过程可以使用参数(由调用过程传递的常数.变量或表达式).如果 Sub 过程无任何参数,则 Sub 语句必须包含空括号 (). 下面的 Sub 过程使用两个固有的(或内置的)VBScript 函数,即 MsgBox 和 InputBox,来提示用户输入信息.然后