正則表達(dá)式已經(jīng)被廣泛應(yīng)用于許多軟件應(yīng)用中,我們?cè)陂_(kāi)發(fā)的時(shí)候可以看到很多正則表達(dá)式的影子,今天錯(cuò)新技術(shù)頻道小編就和大家溫習(xí)一下ASP 正則表達(dá)式的應(yīng)用使用說(shuō)明吧!
一、正則表達(dá)式概述
如果原來(lái)沒(méi)有使用過(guò)正則表達(dá)式,那么可能對(duì)這個(gè)術(shù)語(yǔ)和概念會(huì)不太熟悉。不過(guò),它們并不是您想象的那么新奇。
請(qǐng)回想一下在硬盤(pán)上是如何查找文件的。您肯定會(huì)使用 ? 和 * 字符來(lái)幫助查找您正尋找的文件。? 字符匹配文件名中的單個(gè)字符,而 * 則匹配一個(gè)或多個(gè)字符。一個(gè)如 'data?.dat' 的模式可以找到下述文件:data1.dat、data2.dat等等。如果使用 * 字符代替 ? 字符,則將擴(kuò)大找到的文件數(shù)量。'data*.dat' 可以匹配下述所有文件名:data.dat、data1.dat、data12.dat等等,盡管這種搜索文件的方法肯定很有用,但也十分有限。? 和 * 通配符的有限能力可以使你對(duì)正則表達(dá)式能做什么有一個(gè)概念,不過(guò)正則表達(dá)式的功能更強(qiáng)大,也更靈活。
在我們編寫(xiě)ASP程序時(shí),經(jīng)常會(huì)判斷一個(gè)字符串的有效性,如;一個(gè)串是否是數(shù)字、是否是有效的Email地址等等。如果不使用正則表達(dá)式,那么判斷的程序會(huì)很長(zhǎng),并且容易出錯(cuò),如果使用正則表達(dá)式,這些判斷就是一件很輕松的工作了。后面我們將介紹如何判斷數(shù)字和Email地址的有效性。
在典型的搜索和替換操作中,必須提供要查找的確切文字。這種技術(shù)對(duì)于靜態(tài)文本中的簡(jiǎn)單搜索和替換任務(wù)可能足夠了,但是由于它缺乏靈活性,因此在搜索動(dòng)態(tài)文本時(shí)就有困難了,甚至是不可能的。
使用正則表達(dá)式,能完成些什么事情呢?
測(cè)試字符串的某個(gè)模式。例如,可以對(duì)一個(gè)輸入字符串進(jìn)行測(cè)試,看在該字符串是否存在一個(gè)電話號(hào)碼模式或一個(gè)信用卡號(hào)碼模式。這稱為數(shù)據(jù)有效性驗(yàn)證。
替換文本。可以在文檔中使用一個(gè)正則表達(dá)式來(lái)標(biāo)識(shí)特定文字,然后可以全部將其刪除,或者替換為別的文字。
根據(jù)模式匹配從字符串中提取一個(gè)子字符串。可以用來(lái)在文本或輸入字段中查找特定文字。
例如,如果需要搜索整個(gè) web 站點(diǎn)來(lái)刪除某些過(guò)時(shí)的材料并替換某些HTML 格式化標(biāo)記,則可以使用正則表達(dá)式對(duì)每個(gè)文件進(jìn)行測(cè)試,看在該文件中是否存在所要查找的材料或 HTML 格式化標(biāo)記。用這個(gè)方法,就可以將受影響的文件范圍縮小到包含要?jiǎng)h除或更改的材料的那些文件。然后可以使用正則表達(dá)式來(lái)刪除過(guò)時(shí)的材料,最后,可以再次使用正則表達(dá)式來(lái)查找并替換那些需要替換的標(biāo)記。那么,正則表達(dá)式語(yǔ)法的語(yǔ)法是如何呢?
一個(gè)正則表達(dá)式就是由普通字符(例如字符 a 到 z)以及特殊字符(稱為元字符)組成的文字模式。該模式描述在查找文
字主體時(shí)待匹配的一個(gè)或多個(gè)字符串。正則表達(dá)式作為一個(gè)模板,將某個(gè)字符模式與所搜索的字符串進(jìn)行匹配。
這里有一些可能會(huì)遇到的正則表達(dá)式示例:
?
?
?
?
二、正則表達(dá)式在VBScript中的應(yīng)用
VBScript使用RegExp對(duì)象、Matches集合以及Match對(duì)象提供正則表達(dá)式支持功能。我們還是先看一個(gè)例子。
?
?
?
在這個(gè)例子中,我們查找字符串中有無(wú)is或者js這兩個(gè)詞,忽略大小寫(xiě)。運(yùn)行的結(jié)果如下:
?
?
下面我們就介紹這三個(gè)對(duì)象和集合。
1、RegExp對(duì)象 是最重要的一個(gè)對(duì)象,它有幾個(gè)屬性,其中:
○Global 屬性,設(shè)置或返回一個(gè) Boolean 值,該值指明在整個(gè)搜索字符串時(shí)模式是全部匹配還是只匹配第一個(gè)。如果搜索應(yīng)用于整個(gè)字符串,Global 屬性的值為 True,否則其值為 False。默認(rèn)的設(shè)置為 False。
○IgnoreCase 屬性,設(shè)置或返回一個(gè)Boolean值,指明模式搜索是否區(qū)分大小寫(xiě)。如果搜索是區(qū)分大小寫(xiě)的,則IgnoreCase 屬性為 False;否則為 True。缺省值為 False。
○Pattern 屬性,設(shè)置或返回被搜索的正則表達(dá)式模式。必選項(xiàng)。總是一個(gè) RegExp 對(duì)象變量。
2、Match 對(duì)象
匹配搜索的結(jié)果是存放在Match對(duì)象中,提供了對(duì)正則表達(dá)式匹配的只讀屬性的訪問(wèn)。 Match 對(duì)象只能通過(guò) RegExp 對(duì)象的 Execute 方法來(lái)創(chuàng)建,該方法實(shí)際上返回了 Match 對(duì)象的集合。所有的 Match 對(duì)象屬性都是只讀的。在執(zhí)行正則表達(dá)式時(shí),可能產(chǎn)生零個(gè)或多個(gè) Match 對(duì)象。每個(gè) Match 對(duì)象提供了被正則表達(dá)式搜索找到的字符串的訪問(wèn)、字符串的長(zhǎng)度,以及找到匹配的索引位置等。
○FirstIndex 屬性,返回在搜索字符串中匹配的位置。FirstIndex 屬性使用從零起算的偏移量,該偏移量是相對(duì)于
搜索字符串的起始位置而言的。換言之,字符串中的第一個(gè)字符被標(biāo)識(shí)為字符 0
○Length 屬性,返回在字符串搜索中找到的匹配的長(zhǎng)度。
○Value 屬性,返回在一個(gè)搜索字符串中找到的匹配的值或文本。
3、Matches 集合
正則表達(dá)式 Match 對(duì)象的集合。Matches 集合中包含若干獨(dú)立的 Match 對(duì)象,只能使用 RegExp 對(duì)象的 Execute 方法來(lái)創(chuàng)建之。與獨(dú)立的 Match 對(duì)象屬性相同,Matches `集合的一個(gè)屬性是只讀的。在執(zhí)行正則表達(dá)式時(shí),可能產(chǎn)生零個(gè)或多個(gè) Match 對(duì)象。每個(gè) Match 對(duì)象都提供了與正則表達(dá)式匹配的字符串的訪問(wèn)入口、字符串的長(zhǎng)度,以及標(biāo)識(shí)匹配位置的索引。
學(xué)習(xí)了這三個(gè)對(duì)象和集合,如何應(yīng)用于字符串的判斷和替換呢?regExp對(duì)象的三個(gè)方法正好解決了這個(gè)問(wèn)題,它們是Replace方法、Test方法和Execute方法。
1、Replace 方法
替換在正則表達(dá)式查找中找到的文本。我們還是先看個(gè)例子:下面的例子說(shuō)明了 Replace 方法的用法。
?
?
2、Test 方法
對(duì)指定的字符串執(zhí)行一個(gè)正則表達(dá)式搜索,并返回一個(gè) Boolean 值指示是否找到匹配的模式。正則表達(dá)式搜索的實(shí)際模式是通過(guò)RegExp對(duì)象的Pattern屬性來(lái)設(shè)置的。RegExp.Global屬性對(duì)Test方法沒(méi)有影響。
如果找到了匹配的模式,Test方法返回True;否則返回False。下面的代碼說(shuō)明了Test 方法的用法。
?
?
3、Execute 方法
對(duì)指定的字符串執(zhí)行正則表達(dá)式搜索。正則表達(dá)式搜索的設(shè)計(jì)模式是通過(guò) RegExp 對(duì)象的 Pattern 來(lái)設(shè)置的。
Execute 方法返回一個(gè) Matches 集合,其中包含了在 string 中找到的每一個(gè)匹配的 Match 對(duì)象。如果未找到匹配,Execute 將返回空的 Matches 集合。
三、JavaScript中正則表達(dá)式的使用
在JavaScript 1.2版以后,JavaScript也支持正則表達(dá)式。
1、replace
replace在一個(gè)字符串中通過(guò)正則表達(dá)式查找替換相應(yīng)的內(nèi)容。replace并不改變?cè)瓉?lái)的字符串,只是重新生成了一個(gè)新的字符串。如果需要執(zhí)行全局查找或忽略大小寫(xiě),那幺在正則表達(dá)式的最后添加g和i。
例:
?
?
結(jié)果是:"oranges are round, and oranges are juicy."
例:
?
?
結(jié)果是:"Twas the night before Christmas..."
例:
?
?
結(jié)果是:"Smith, John".
2、search
search通過(guò)正則表達(dá)式查找相應(yīng)的字符串,只是判斷有無(wú)匹配的字符串。如果查找成功,search返回匹配串的位置,否則返回-1。
search(regexp)
?
?
3、match
match方法執(zhí)行全局查找,查找結(jié)果存放在一個(gè)數(shù)組里。
例一:
?
?
顯示結(jié)果:Chapter 3.4.5.1,Chapter 3.4.5.1,.1
例二:
?
?
顯示結(jié)果D, d.
四、示例
1 、判斷數(shù)字的正確性
?
?
2、判斷Email地址的正確性
?
?
本文是ASP 正則表達(dá)式的應(yīng)用使用說(shuō)明,大家認(rèn)真閱讀之后是不是了解了呢?如有疑問(wèn),可以隨時(shí)給小編留言,我們會(huì)在第一時(shí)間回復(fù)您,也感謝大家繼續(xù)支持錯(cuò)新技術(shù)頻道!
|
新聞熱點(diǎn)
疑難解答