VBS正则表达式对象的MultiLine属性_vbs

在 Introduction to Regular Expressions(正则表达式简介) 一章中的 Backreferences(向后引用)一节:

复制代码 代码如下:

'使用上面所示的正则表达式,下面的 JScript 代码可以使用子匹配信息,在一个文字字符串中将连续出现两次的相同单词替换为一个相同的单词:
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, rv
ss = "Is is the cost of of gasoline going up up?." & vbNewLine
Set re = New RegExp
re.Pattern = "\b([a-z]+) \1\b"
re.Global = True
re.IgnoreCase = True
re.MultiLine = True
rv = re.Replace(ss,"$1")请注意在 VBScript 代码中,全局、大小写敏感性以及多行标记都是使用 RegExp 对象的适当属性来设置的。

需要注意的是 VBScript 中多行标记和 Perl 兼容的正则表达式中的多行标记并不完全一样:

如果 multiline 为 false,那么 "^" 匹配字符串的开始位置,而 "$" 匹配字符串的结束位置。如果 multline 为 true,那么 "^" 匹配字符串开始位置以及 "\n" 或 "\r" 之后的位置,而 "$" 匹配字符串结束位置以及 "\n" 或 "\r" 之前的位置。

而在 Perl 中,如果设置了多行标记,"^" 匹配字符串开始位置以及 "\n" 之后的位置,而 "$" 匹配字符串结束位置以及 "\n" 之前的位置。也就是 Perl 兼容的正则表达式并不匹配 "\r",这跟 Linux 系统中文本的换行符与 Windows 系统中不一样有关。Linux 系统中文本的换行符为 "\n",而 Windows 系统中为 "\r\n",这就导致了正则表达式的不同。

VBS 正则表达式 MultiLine 属性的这个特性可能会导致某些问题,所以在用 VBS 正则表达式处理文本时我一般会先把 "\r\n" 替换成 "\n":

复制代码 代码如下:

Dim fso, str
Set fso = CreateObject("scripting.filesystemobject")
str = fso.OpenTextFile("demon.txt")
str = Replace(str, vbCrLf, vbLf)

原文: http://demon.tw/programming/vbs-regexp-multiline.html

时间: 2024-11-08 21:23:49

VBS正则表达式对象的MultiLine属性_vbs的相关文章

VBS正则表达式简介 -定位符

  定位符 到现在为止,所看到的示例都只考虑查找任何地方出现的章节标题.出现的任何一个字符串 'Chapter' 后跟一个空格和一个数字可能是一个真正的章节标题,也可能是对其他章节的交叉引用.由于真正的章节标题总是出现在一行的开始,因此需要设计一个方法只查找标题而不查找交叉引用. 定位符提供了这个功能.定位符可以将一个正则表达式固定在一行的开始或结束.也可以创建只在单词内或只在单词的开始或结尾处出现的正则表达式.下表包含了正则表达式及其含义的列表: 字符 描述 ^ 匹配输入字符串的开始位置.如果

VBS创建正则表达式对象的两种方法_vbs

一直以来,我都是用 New RegExp 来创建正则表达式对象的: Set regex = New RegExp然而最新才发现 VBS 的正则表达式对象也可以这样创建: Set regex = CreateObject("VBScript.RegExp")貌似我看过的 VBScript 书籍没有一本介绍过这种写法,当然,书上没写的东西还有很多. 既然提到了正则表达式,那么就顺便说一下,VBS 的正则表达式对象是支持 MultiLine 模式的,对象有一个 MultiLine 属性.运行

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

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

JavaScript正则表达式之multiline属性的应用

        这篇文章主要介绍了JavaScript正则表达式之multiline属性的应用,是JS学习进阶中的重要知识,需要的朋友可以参考下             多行正则表达式是对象的只读布尔属性.它指定是否一个特定的正则表达式进行多行匹配,即,不管是否使用"m"属性创建. 语法 ? 1 RegExpObject.multiline 下面是参数的详细信息: NA 返回值: 如果"m"修改被设置返回"TRUE",否则返回"FALS

JavaScript正则表达式之multiline属性的应用_基础知识

 多行正则表达式是对象的只读布尔属性.它指定是否一个特定的正则表达式进行多行匹配,即,不管是否使用"m"属性创建.语法 RegExpObject.multiline 下面是参数的详细信息:     NA 返回值: 如果"m"修改被设置返回"TRUE",否则返回"FALSE". 例子: <html> <head> <title>JavaScript RegExp multiline Prope

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

FirstIndex 属性 返回在搜索字符串中匹配的位置. object.FirstIndex object 参数总是一个 Match 对象. 说明 FirstIndex 属性使用从零起算的偏移量,该偏移量是相对于搜索字符串的起始位置而言的.换言之,字符串中的第一个字符被标识为字符 0. 下面的例子说明了 FirstIndex 属性的用法: ~Function RegExpTest(patrn, strng) Dim regEx, Match, Matches         ' 建立变量. S

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

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

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

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

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

IgnoreCase 属性 设置或返回一个Boolean值,指明模式搜索是否区分大小写. object.IgnoreCase [= True | False ] Object 参数总是一个 RegExp 对象.如果搜索是区分大小写的,则 IgnoreCase 属性为 False:否则为 True.缺省值为 False. 说明 下面的代码说明了 IgnoreCase 属性的用法(改变赋予 IgnoreCase 属性的值以观察其效果): Function RegExpTest(patrn, strn