现在的位置: 首页 > 综合 > 正文

VBScript中的正则表达式语法详解

2013年09月09日 ⁄ 综合 ⁄ 共 3212字 ⁄ 字号 评论关闭
文章目录

★●黑基论坛●★'s Archiver

330466386 发表于 2009-2-10 19:34

VBScript中的正则表达式语法详解

在vbscript中功能最强大也最灵活的的要数正则表达式(RegExp对象)和类(class)了。

    我也是在不久前才完全的懂得正则表达式的。

-------------------正则表达式的所有内容-----------------------------

RegExp属性
   Global
   IgnoreCase
   Pattern

RegExp方法
   Execute
   Replace
   Test

RegExp对象
   Match
   Match属性
       FirstIndex
       Length
       Value

RegExp集合
   Matches
   SubMatches

------------------这些内容均包含在置顶帖子中的vbscript手册中-----------------------------

    我在学习正则表达式的时候根本不知何谓正则表达式、对他的理解也非常模糊,以至于接触了很长时间才懂得,虽然vbs手册中有很详细地解释。

    正则表达式我个人将其理解为用来搜索文本然后然后对搜索结果作处理的一些列动作。

    先来看一段大家所熟知的ubb代码
[quote]function ubb(str)
  Dim rex,match,matches  ' 建立变量。
  Set rex= New RegExp  ' 建立规范表达式。
  rex.IgnoreCase = True  ' 设置是否区分字母的大小写。
  rex.Global = True  ' 设置全程性质。
  rex.Pattern = "/[url=(.*)](.*)/[//url]"  ' 设置模式。官方是这样解释的,我认为我们应该换一种叫法:搜索方法,这样我们才便于理解。
  ubb = rex.replace(str,"<a href=$1>$2</a>") &#39;将我们搜索到的内容替换
&#39;我们在设定搜索的时候用到了两个括号,也就是说我们将只需要用到这两个括号中的内容,这两个括号中的内容在替换的时候将会用$1(第一个括号中的内容)和$2(第二个括号中的内容)来代替。
end function
&#39;用法
dim text
text="[url=http://www.aaa.com]link[/url]"
document.write ubb(text) &#39;输出文本并调用正则表达式
&#39;如果在asp中使用请将document替换为response[/quote]
上面是一个简单的正则演示,在这个演示中我们只用了一行内容,用方法replace在替换文字的时候只处理一行中的第一个ubb代码头和最后的一个ubb代码的尾,如下:
[url=http://www.aaa.com]link[/url] [url=http://www.aaa.com]link[/url]
将会被替换为<a href=http://www.aaa.com]link[/url] [url=http://www.aaa.com></a>,这个结果可不是我们要的,
也就是说我们必须在大量替换搜索内容前将要搜索的全部的文本或者字符串作处理。处理的结果就是要保证每一行只能存在一个相应的代码。这点非常重要,在我学习的时候一直搞不明白为什么?后来才知道是这个原因。

    在上面的一个示例中我们用到了正则表达使得所有属性以及replace的方法,下来我们来看一下有关于方法Execute,对象Match及所有属性,集合Matches 的一个官方的示例
[quote]Function RegExpTest(patrn, strng)
  Dim regEx, Match, Matches  &#39; 建立变量。
  Set regEx = New RegExp  &#39; 建立正则表达式。
  regEx.Pattern = patrn  &#39; 设置模式。即:搜索方法
  regEx.IgnoreCase = True  &#39; 设置是否区分大小写。
  regEx.Global = True  &#39; 设置全程可用性。
  Set Matches = regEx.Execute(strng)  &#39; 执行搜索。我们可以理解为被搜索的字符串
  For Each Match in Matches    &#39; 遍历 Matches 集合。
    RetStr = RetStr & "匹配" & Match&#39; 注意,在官方提供的示例中这里是错误的,
这里是被匹配的名称
    RetStr = RetStr & "位于" & Match.FirstIndex & "。"&#39;这里是匹配内容的第一个字符,该数字从0开始
    RetStr = RetStr & "匹配的长度为"& Match.Length & "个字符。" 这里不用解释了吧?
    RetStr = RetStr & vbCRLF &#39;这里是换行
  Next
  RegExpTest = RetStr
End Function
document.write(RegExpTest("is.", "IS1 is2 IS3 is4"))
&#39;如果在asp中使用请将document替换为response[/quote]
在这个示例中我们可以看到方法Execute和对象Match是使用在集合Matches中的,Match和Matches是作为变量来使用的,为了我们很容易得看懂它,我们没有必要将他们换名字。关于对象Match的属性,我在上面的示例中都做了注释了。

    最后我们来看集合SubMatches,代码如下:(由于官方的这段代码很含糊,所以我修改了一下)
[quote]Function SubMatchTest(inpStr)
  Dim Re, Match, Matches
  Set Re = New RegExp
  Re.Pattern = "(/w+)@(/w+)/.(/w+)"
  Set Matches = Re.Execute(inpStr)
  Set Match = Matches(0) &#39;由于这里没有使用循环,所以只能搜索一次。只匹配搜索到的第一个内容
  retStr = "电子邮件地址是: " & Match & vbNewline &#39; 这里是匹配的内容
  retStr = retStr & "电子邮件别名是: " & Match.SubMatches(0) &#39;第一个括号中的内容
  retStr = retStr & vbNewline
  retStr = retStr & "组织是: " & Match. SubMatches(1)&#39;第二个括号中的内容
  SubMatchTest = retStr
End Function
document.write(SubMatchTest("请写信到 dragon@xyzzy.com 。谢谢!"))
&#39;如果在asp中使用请将document替换为response[/quote]
在上面的这段代码中我们看到了对象Match和集合Matches的另外一种用法,由此可见所有的集合均可以用这种方法,就像实用数组一样。看完上面的代码有些朋友可能想到既然在属性Pattern中已经提供了$1$2.....$n这种方法,为什么还要存在集合SubMatches呢?实际上在我们使用证则表达式的时候可能搜索要匹配的内容或字符串很长,然而我们还要对搜索到匹配的字符串进行进一步的处理,而$又不能实现这个,于是便有了集合SubMatches。

    到这里有关于VBScript的正则表达式的内容就全部说完了,上面的3个代码均可以放在<SCRIPT Language="VBScript"></SCRIPT>标签中使用也可以放在ASP中执行。

抱歉!评论已关闭.