在 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

华山资源网 Design By www.eoogi.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
华山资源网 Design By www.eoogi.com

稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!

昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。

这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。

而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?