正则表达式在asp中的应用

上一篇 / 下一篇  2007-09-29 16:53:01 / 个人分类:ASP

L3if5}6W/r#er6B0 如果原来没有使用过正则表达式,那么可能对这个术语和概念会不太熟悉。不过,它们并不是您想象的那么新奇。请回想一下在硬盘上是如何查找文件的。您肯定会使用 ? 和 * 字符来帮助查找您正寻找的文件。? 字符匹配文件名中的单个字符,而 * 则匹配一个或多个字符。一个如'data?.dat' 的模式可以找到下述文件:data1.dat、data2.dat等等。如果使用 * 字符代替 ? 字符,则将扩大找到的文件数量。'data*.dat' 可以匹配下述所有文件名:data.dat、data1.dat、data12.dat等等,尽管这种搜索文件的方法肯定很有用,但也十分有限。? 和 * 通配符的有限能力可以使你对正则表达式能做什么有一个概念,不过正则表达式的功能更强大,也更灵活。
6u[+N Zv#f*s,S0
(VX'{2K l/CzB0在我们编写ASP程序时,经常会判断一个字符串的有效性,如;一个串是否是数字、是否是有效的Email地址等等。如果不使用正则表达式,那么判断的程序会很长,并且容易出错,如果使用正则表达式,这些判断就是一件很轻松的工作了。后面我们将介绍如何判断数字和Email地址的有效性。
S E(C;t6|(i Q051Testing软件测试网*t[{jJF{O
在典型的搜索和替换操作中,必须提供要查找的确切文字。这种技术对于静态文本中的简单搜索和替换任务可能足够了,但是由于它缺乏灵活性,因此在搜索动态文本时就有困难了,甚至是不可能的。 51Testing软件测试网2P*K~Xso

iY"HsZ sj x0使用正则表达式,能完成些什么事情呢?51Testing软件测试网ph^3o)B@+O4PvP
51Testing软件测试网?,h ws)G
1) 测试字符串的某个模式。例如,可以对一个输入字符串进行测试,看在该字符串是否存在一个电话号码模式或一个信用卡号码模式。这称为数据有效性验证。 51Testing软件测试网 K8`9dz}%jj'erB[

;DU&~+HO2A;cc1BL02) 替换文本。可以在文档中使用一个正则表达式来标识特定文字,然后可以全部将其删除,或者替换为别的文字。 
Q:ib^ z8_Dc q051Testing软件测试网s PR"d pg
3) 根据模式匹配从字符串中提取一个子字符串。可以用来在文本或输入字段中查找特定文字。 51Testing软件测试网P7gCogfb
51Testing软件测试网8k LIc(m ?_;v [5N
例如,如果需要搜索整个 web 站点来删除某些过时的材料并替换某些HTML 格式化标记,则可以使用正则表达式对每个文件进行测试,看在该文件中是否存在所要查找的材料或 HTML 格式化标记。用这个方法,就可以将受影响的文件范围缩小到包含要删除或更改的材料的那些文件。然后可以使用正则表达式来删除过时的材料,最后,可以再次使用正则表达式来查找并替换那些需要替换的标记。51Testing软件测试网wz` D:V7C [+S M"@
51Testing软件测试网$iy2eu{+H6E
那么,正则表达式语法的语法是如何呢?51Testing软件测试网4|P(nH0D3k
51Testing软件测试网)Sdw"r g-EGzp
一个正则表达式就是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。这里有一些可能会遇到的正则表达式示例:
*@ B8A9KN7A051Testing软件测试网4H1v-\-vKX_XQ
/^\[ \t]*$/或"^\[ \t]*$"    匹配一个空白行。 51Testing软件测试网?rE ^m,Z.T8~
/\d{2}-\d{5}/或"\d{2}-\d{5}"    验证一个ID 号码是否由一个2位数字,一个连字符以及一个5位数字组成。 51Testing软件测试网I6Kh;biO
/<(.*)>.*<\/\1>/或"<(.*)>.*<\/\1>"    匹配一个 HTML 标记。 
hI@&s4_ D0
NwG$V!v2K*S0二、正则表达式在VBscrīpt中的应用51Testing软件测试网'ioQ!Zp1cA @ L
51Testing软件测试网AXr4Qmr[X\6w
VBscrīpt使用RegExp对象、Matches集合以及Match对象提供正则表达式支持功能。我们还是先看一个例子。51Testing软件测试网+{*m2^r OC^

d ^ _F7J i[0
程序代码程序代码
<%51Testing软件测试网i#k]0z$y)sCb
Function RegExpTest(patrn, strng)
a/qXf#B\0    Dim regEx,Match,Matches   '建立变量。51Testing软件测试网4i [8~%Vx
    Set regEx = New RegExp   '建立正则表达式。
X9EvF1T&P)o3{0    regEx.Pattern = patrn  '设置模式。
t3j3U2W"}-c'|Q?0    regEx.IgnoreCase = True   '设置是否区分字符大小写。
(h:k&er5iw;tV0    regEx.Global = True   '设置全局可用性。51Testing软件测试网FR/M_~4m
    Set Matches = regEx.Execute(strng)  '执行搜索。
'u2Z:k`1T7YY^0    For Each Match in Matches  '遍历匹配集合。
9C/]J1BV$iK]0        RetStr = RetStr & "Match found at position "
~1y~o Oy'{)aNL8A0        RetStr = RetStr & Match.FirstIndex & ". Match Value is '"51Testing软件测试网Y$h(PJgg!utBk
        RetStr = RetStr & Match.Value & "'." & "<BR>"51Testing软件测试网8w$TMW?)B
    Next
+E{(wTj:k q3lUK `0    RegExpTest = RetStr
Y4bN&x vHR[ aZ,dv0End Function
*@%\1X$`d5[,t,du6p051Testing软件测试网p.x&{)I3rueB
response.write RegExpTest("[ij]s.", "IS1 Js2 IS3 is4")51Testing软件测试网%l`lUP5M*C
%>

{$M5}Zogo9?JN0
%S tf*u\zW0
V8@UkE m7q0在这个例子中,我们查找字符串中有无is或者js这两个词,忽略大小写。运行的结果如下:
8U9|Fk(MR5yFN!HC0Match found at position 0. Match Value is 'IS1'.
oR^6_W0_0Match found at position 4. Match Value is 'Js2'.
A?\.D8m9R0Match found at position 8. Match Value is 'IS3'.51Testing软件测试网N(`7x7x9o![#N"G
Match found at position 12. Match Value is 'is4'.51Testing软件测试网s z` ~+h'A

~/s,rXj;h0下面我们就介绍这三个对象和集合。
9xxmvFM01、RegExp对象是最重要的一个对象,它有几个属性,其中:
3W$F)P] [0○ Global 属性,设置或返回一个 Boolean 值,该值指明在整个搜索字符串时模式是全部匹配还是只匹配第一个。如果搜索应用于整个字符串,Global 属性的值为 True,否则其值为 False。默认的设置为 False。51Testing软件测试网Rd#V4cv s'ZX
○ IgnoreCase 属性,设置或返回一个Boolean值,指明模式搜索是否区分大小写。如果搜索是区分大小写的,则 IgnoreCase 属性为 False;否则为 True。缺省值为 False。51Testing软件测试网G,['v(trv ZH(\
○ Pattern 属性,设置或返回被搜索的正则表达式模式。必选项。总是一个 RegExp 对象变量。
[ mw0g:Lo,y051Testing软件测试网uk,Y-|l
2、Match 对象51Testing软件测试网l!d:^V CA C e-u
匹配搜索的结果是存放在Match对象中,提供了对正则表达式匹配的只读属性的访问。 Match 对象只能通过 RegExp 对象的 Execute 方法来创建,该方法实际上返回了 Match 对象的集合。所有的 Match 对象属性都是只读的。在执行正则表达式时,可能产生零个或多个 Match 对象。每个 Match 对象提供了被正则表达式搜索找到的字符串的访问、字符串的长度,以及找到匹配的索引位置等。51Testing软件测试网-c|;BX \PI
○ FirstIndex 属性,返回在搜索字符串中匹配的位置。FirstIndex 属性使用从零起算的偏移量,该偏移量是相对于搜索字符串的起始位置而言的。换言之,字符串中的第一个字符被标识为字符 0
]?%TY%@G~t"K lT0○ Length 属性,返回在字符串搜索中找到的匹配的长度。51Testing软件测试网s `C&r:m} d
○ Value 属性,返回在一个搜索字符串中找到的匹配的值或文本。
u O0ra,nsyuj051Testing软件测试网1eHh2u^5^'o
3、Matches 集合
+K#Lct G6jG&A1[z0正则表达式 Match 对象的集合。Matches 集合中包含若干独立的 Match 对象,只能使用 RegExp 对象的 Execute 方法来创建之。与独立的 Match 对象属性相同,Matches `集合的一个属性是只读的。在执行正则表达式时,可能产生零个或多个 Match 对象。每个 Match 对象都提供了与正则表达式匹配的字符串的访问入口、字符串的长度,以及标识匹配位置的索引。
,{ S_1@4pw3m;Q?051Testing软件测试网^"j Z,WFN*Y#z:dyWa
学习了这三个对象和集合,如何应用于字符串的判断和替换呢?regExp对象的三个方法正好解决了这个问题,它们是Replace方法、Test方法和Execute方法。
6gW'_JW pu0
!]'y|W aV,D01、Replace 方法51Testing软件测试网;bb X:n7qnW
替换在正则表达式查找中找到的文本。我们还是先看个例子:下面的例子说明了 Replace 方法的用法。51Testing软件测试网 ~vCu? Y Uo,G%`^
51Testing软件测试网vWh)noo|r

程序代码程序代码
<%
q Tf2lmm}&F/R0Function ReplaceTest(patrn, replStr)51Testing软件测试网c'nU!MC,j
    Dim regEx, str1 ' 建立变量。51Testing软件测试网3c"Aa&~5b\
    str1 = "The quick brown fox jumped over the lazy dog."51Testing软件测试网Z2M*buB0^+s5RQi r
    Set regEx = New RegExp ' 建立正则表达式。
0p:Z$B5lv/{{0    regEx.Pattern = patrn ' 设置模式。
9_k1GJ4_9l~%cu|mU0    regEx.IgnoreCase = True ' 设置是否区分大小写。
,pS%jp3\"{4|-R0    ReplaceTest = regEx.Replace(str1, replStr) ' 作替换。51Testing软件测试网R8g1z/L0Z~+uj3~
End Function51Testing软件测试网7p'g&E-s$`2O
Response.write ReplaceTest("fox", "cat") & "<BR>" ' 将 'fox' 替换为 'cat'。
:Kwl!g4@(J4Z0Response.write ReplaceTest("(\S+)(\s+)(\S+)", "$3$2$1") ' 交换词对.51Testing软件测试网;o@m0s!Nk5I
%>
51Testing软件测试网w#mBI,}n'j xr

51Testing软件测试网(Y|yH6D*x

B8o2Qh!n-Y_8g:w@02、Test 方法
Q^bQ L0对指定的字符串执行一个正则表达式搜索,并返回一个 Boolean 值指示是否找到匹配的模式。正则表达式搜索的实际模式是通过RegExp对象的Pattern属性来设置的。RegExp.Global属性对Test方法没有影响。如果找到了匹配的模式,Test方法返回True;否则返回False。下面的代码说明了Test 方法的用法。
8]a1u2@5FRx a051Testing软件测试网5W4Y&F#a0Mo8iQ;O

程序代码程序代码
<%
HZk?o9P6F0Function RegExpTest(patrn, strng)
E%ALTptG0    Dim regEx, retVal ' 建立变量。51Testing软件测试网0aA#c|(GVK/\!D
    Set regEx = New RegExp ' 建立正则表达式。51Testing软件测试网N$hf qgW7@
    regEx.Pattern = patrn ' 设置模式。51Testing软件测试网^T&O Mt0a-m#}7E
    regEx.IgnoreCase = False ' 设置是否区分大小写。
?_6H2v c ZIN'H)@0    retVal = regEx.Test(strng) ' 执行搜索测试。
gPY7P5r ]_D0    If retVal Then51Testing软件测试网rgtp$hL2n"}
        RegExpTest = "找到一个或多个匹配。"
oMK??3a'gC0    Else51Testing软件测试网)t9Q qj}y*L;U'^&E
        RegExpTest = "未找到匹配。"51Testing软件测试网;o.\ a!G D1piq lW.S
    End If
,d E+e.a xA;]o(d#^0End Function
[4R#}$o$Rbi/`0@0Response.write RegExpTest("is.", "IS1 is2 IS3 is4")51Testing软件测试网P2V+@2s:h6X1O u:e
%>

(hC'h!qa+iJ fj~0
[R4JgH051Testing软件测试网#WW7B6ZJm5T`8T c7O

-M%Iy*FZt U[c03、Execute 方法51Testing软件测试网 Q$p R,\J*CFt
对指定的字符串执行正则表达式搜索。正则表达式搜索的设计模式是通过 RegExp 对象的 Pattern 来设置的。Execute 方法返回一个 Matches 集合,其中包含了在 string 中找到的每一个匹配的 Match 对象。如果未找到匹配,Execute 将返回空的 Matches 集合。

e(yLu3nLx0

TAG: ASP

 

评分:0

我来说两句

Open Toolbar