此空间已闲置,个人主页已转到http://www.hixk.net

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

上一篇 / 下一篇  2007-08-21 10:11:38 / 个人分类:脚本开发

-------------------正则表达式的所有内容-----------------------------
RegExp属性51Testing软件测试网:w:J8jE5F y
Global51Testing软件测试网c%h8Zfajm#?$F!S
IgnoreCase51Testing软件测试网0B-m(u(\ XYi/H0W/R#f#XY
Pattern
RegExp方法51Testing软件测试网n1lF/Cl#E |@xxp;C
Execute
neE&|$]&cHI)G0Replace51Testing软件测试网.Epf&N$c\Q&X
Test
RegExp对象51Testing软件测试网,}QqU e$_ft!JK
Match51Testing软件测试网"FZ1t LS3^qb
Match属性51Testing软件测试网E[2]J9h7R&x
FirstIndex
c1{S|E0Length
3}~:}$d1r r vC0Value
RegExp集合51Testing软件测试网I Ckl p:Q\M ^/@
Matches51Testing软件测试网 b0e(hL/R
SubMatches
我在学习正则表达式的时候根本不知何谓正则表达式、对他的理解也非常模糊,以至于接触了很长时间才懂得,虽然vbs手册中有很详细地解释。
正则表达式我个人将其理解为用来搜索文本然后然后对搜索结果作处理的一些列动作。
先来看一段大家所熟知的ubb代码51Testing软件测试网 [5NdU7jU)~ l
function ubb(str)
3S6P1mj ru?6_0Dim rex,match,matches 建立变量。51Testing软件测试网G`2u A#Ra
Set rex= New RegExp 建立规范表达式。
OB5r&aN+Nf0rex.IgnoreCase = True 设置是否区分字母的大小写。
#Tl'^.b q6joqa*J0rex.Global = True 设置全程性质。
.R0Y^ \L0?{ U0rex.Pattern = "\(.*)\[\/url]" 设置模式。官方是这样解释的,我认为我们应该换一种叫法:搜索方法,这样我们才便于理解。51Testing软件测试网x7wsNv*nb
ubb = rex.replace(str,"<a href=$1>$2</a>") 将我们搜索到的内容替换
F mn#kl7a0我们在设定搜索的时候用到了两个括号,也就是说我们将只需要用到这两个括号中的内容,这两个括号中的内容在替换的时候将会用$1(第一个括号中的内容)和$2(第二个括号中的内容)来代替。51Testing软件测试网_q[)\6_#]
end function
3})w/E6]$~3^\7S0用法51Testing软件测试网7s { n U zf
dim text51Testing软件测试网7je2Tk+?
text="
link"51Testing软件测试网.|1? ~%d(v'V
document.write ubb(text) 输出文本并调用正则表达式51Testing软件测试网 p~ mBC3Uq]
如果在asp中使用请将document替换为response
上面是一个简单的正则演示,在这个演示中我们只用了一行内容,用方法replace在替换文字的时候只处理一行中的第一个ubb代码头和最后的一个ubb代码的尾,如下:
*q\ S/AG&fo?0linklink51Testing软件测试网 vdb#j/Y
将会被替换为<a href=http://www.aaa.com]link[url=http://www.aaa.com></a>,这个结果可不是我们要的,51Testing软件测试网%p {x/P S3N5pmI
也就是说我们必须在大量替换搜索内容前将要搜索的全部的文本或者字符串作处理。处理的结果就是要保证每一行只能存在一个相应的代码。这点非常重要,在我学习的时候一直搞不明白为什么?后来才知道是这个原因。
在上面的一个示例中我们用到了正则表达使得所有属性以及replace的方法,下来我们来看一下有关于方法Execute,对象Match及所有属性,集合Matches 的一个官方的示例
e*Ze XqF"q0Function RegExpTest(patrn, strng)51Testing软件测试网Va2_Q{Q
Dim regEx, Match, Matches 建立变量。
;`C4fJ vL:}g)s0Set regEx = New RegExp 建立正则表达式。
,?:D;I$G ld0regEx.Pattern = patrn 设置模式。即:搜索方法51Testing软件测试网MT:p)h;u-gef
regEx.IgnoreCase = True 设置是否区分大小写。51Testing软件测试网*{&RqM:AN)w"V3Ts4C
regEx.Global = True 设置全程可用性。
:c^8JnV8h4nZf0Set Matches = regEx.Execute(strng) 执行搜索。我们可以理解为被搜索的字符串
d9N*OOUp VG0For Each Match in Matches 遍历 Matches 集合。
M+C u5l` Y0RetStr = RetStr & "匹配" & Match 注意,在官方提供的示例中这里是错误的,
FXk0Q dMr.i.]9r0这里是被匹配的名称51Testing软件测试网8s{,w'd n[ z5oxQ
RetStr = RetStr & "位于" & Match.FirstIndex & "。"这里是匹配内容的第一个字符,该数字从0开始51Testing软件测试网9c0i3KeG%N R3T
RetStr = RetStr & "匹配的长度为"& Match.Length & "个字符。" 这里不用解释了吧?
'@li r _ IM0RetStr = RetStr & vbCRLF 这里是换行51Testing软件测试网;JsN4v Wb,R0l
Next51Testing软件测试网5j a4H8oPd3w"G
RegExpTest = RetStr
3AU&w*d7sF3dSc:V`0End Function
.e \ GrM R/Z0document.write(RegExpTest("is.", "IS1 is2 IS3 is4"))
}d@+h `o+E2wj0如果在asp中使用请将document替换为response51Testing软件测试网3t"I,zF&B[ _!w)h
在这个示例中我们可以看到方法Execute和对象Match是使用在集合Matches中的,Match和Matches是作为变量来使用的,为了我们很容易得看懂它,我们没有必要将他们换名字。关于对象Match的属性,我在上面的示例中都做了注释了。
最后我们来看集合SubMatches,代码如下:(由于官方的这段代码很含糊,所以我修改了一下)51Testing软件测试网tH8bp5t
Function SubMatchTest(inpStr)
U,I(H6_f'Rs/v0Dim Re, Match, Matches
%{0}.Nr:I0C0Set Re = New RegExp
j#s6M9Xb`0Re.Pattern = "(\w+)@(\w+)\.(\w+)"
lqN{T1\0Set Matches = Re.Execute(inpStr)51Testing软件测试网9n s5q6x'?f*H,\)i'w
Set Match = Matches(0) 由于这里没有使用循环,所以只能搜索一次。只匹配搜索到的第一个内容51Testing软件测试网P"N f@pr^y
retStr = "电子邮件地址是: " & Match & vbNewline 这里是匹配的内容
8_:P*XJ~4IOV.Z0retStr = retStr & "电子邮件别名是: " & Match.SubMatches(0) 第一个括号中的内容51Testing软件测试网 SY\`]1p.h3Q\
retStr = retStr & vbNewline51Testing软件测试网H,rT B8xqLg3Hv8v
retStr = retStr & "组织是: " & Match. SubMatches(1)第二个括号中的内容
_ ~iP_(A QW G0SubMatchTest = retStr51Testing软件测试网/r yU6z2n {*z|&k
End Function
6A F g;i.c+mp"Q`0document.write(SubMatchTest("请写信到dragon@xyzzy.com。谢谢!"))51Testing软件测试网T*F^7W*K(b#V V x
如果在asp中使用请将document替换为response
#d3E bj @:lY,Y8K,o0在上面的这段代码中我们看到了对象Match和集合Matches的另外一种用法,由此可见所有的集合均可以用这种方法,就像实用数组一样。看完上面的代码有些朋友可能想到既然在属性Pattern中已经提供了$1$2.....$n这种方法,为什么还要存在集合SubMatches呢?实际上在我们使用证则表达式的时候可能搜索要匹配的内容或字符串很长,然而我们还要对搜索到匹配的字符串进行进一步的处理,而$又不能实现这个,于是便有了集合SubMatches。
到这里有关于VBscrīpt的正则表达式的内容就全部说完了,上面的3个代码均可以放在<scrīpt Language="VBscrīpt"></scrīpt>标签中使用也可以放在ASP中执行。
nbb0E/o O$|I M-e0

TAG: 脚本开发

 

评分:0

我来说两句

日历

« 2024-04-21  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 23054
  • 日志数: 28
  • 图片数: 2
  • 文件数: 5
  • 建立时间: 2007-05-15
  • 更新时间: 2008-03-26

RSS订阅

Open Toolbar