在asp中,使用正則表達(dá)式前需聲明對(duì)象“set re=new regexp”。
regexp有三個(gè)重要屬性:
1. global:設(shè)置或返回一個(gè)布爾值,指明搜索匹配字符串時(shí)是針對(duì)全部文本還是只匹配第一處,默認(rèn)為false
2. ignorecase:設(shè)置或返回一個(gè)布爾值,指明搜索字符串時(shí)是否區(qū)分大小寫,默認(rèn)為false
3. pattern:此項(xiàng)以正則表達(dá)式(即形同"[^]]*"之類的式子)表示,指明匹配模式,此為必設(shè)項(xiàng)
regexp對(duì)象的方法:
1. regexp.replace(string, text):在文本string中,將以pattern模式找到的匹配字符串替換為變量text,并返回替換后文本
2. regexp.test(string):在文本string中搜索匹配字串,如有匹配則返回true,否則返回false
3. regexp.execute(string):在文本string中搜索匹配字串,并將各匹配字串分別放在各match對(duì)象中,后返回所有match對(duì)象之集合matches
match對(duì)象的屬性:
1. firstindex:返回該對(duì)象對(duì)應(yīng)匹配字串的首字母在原始文本中的索引,以“0”為起始位置
2. length:返回匹配字串長(zhǎng)度
3. value:返回匹配字串
下面回顧一下上次的函數(shù):
set re=new regexp '建立正則表達(dá)式對(duì)象regular expression
re.ignorecase=true '忽略大小寫
re.global=true
'---------搜索匹配字串針對(duì)全部文本而不是僅一處
re.pattern="((http|https|ftp):\/\/([\w-]+\.)+[\w]+(\/[\w-]+)*[\/]?([\w-]+\.[\w]+)?(\?[\w]+=[\w]+(&[\w]+=[\w]+)*)?)"
'上面一句,最外層一個(gè)圓括號(hào),其中的所有字串可用"$1"表示,"$2"表示第一個(gè)嵌套括號(hào)中的字串"http|https|ftp"(這里只用到"$1")。
'以這個(gè)網(wǎng)址為例說明匹配情況 "http://jinminghou.cn/test/index.asp?p=1&q=2":
'"http|https|ftp"表示三者中的一個(gè),匹配網(wǎng)址的前綴"http";
'":\/\/"用到了轉(zhuǎn)義字符"\",等價(jià)于"://";
'"[\w]"匹配單個(gè)字母、數(shù)字和下劃線,"[\w-]"匹配單個(gè)"\w"或"-","[\w-]+"匹配至少一個(gè)"\w"或"-","[\w-]+\."匹配一個(gè)以"."結(jié)束的字串如"ming-hou.",而"([\w-]+\.)+"則匹配多個(gè)以"."結(jié)束的字串如這里的"jinminghou.";
'"[\w]+"匹配這里的"com";
'"(\/[\w-]+)*"匹配0個(gè)或以上類似"/v1"的字串,這是可有可無的;
'"[\/]?"表示網(wǎng)址后的"/"可有可無,但不超過一個(gè);
'"([\w-]+\.[\w]+)?"匹配0或1個(gè)這里的"index.htm";
'再看最后的"?p=1&q=2",這種以"?"開始的字串最多只有一個(gè),而其中以"&"開始的則可有多個(gè)。"\?[\w]+=[\w]+"匹配"?p=1","&[\w]+=[\w]+"匹配"&q=2",后加"*"表示可重復(fù)0~n次,而"(\?[\w]+=……+)*)?"后的"?"表示整個(gè)以"?"開始的參數(shù)可重復(fù)0~1次。
str=re.replace(str,"$1")
最后,以pattern指定的模式替換匹配文本,上面的"$1"表示最外層圓括號(hào)內(nèi)的整個(gè)網(wǎng)址。
如下是一段自動(dòng)識(shí)別鏈接的代碼:
function autolink(str)
str=" "&str
set re=new regexp '建立正則表達(dá)式對(duì)象regular expression
re.ignorecase=true '忽略大小寫
re.global=true
'---------搜索匹配字串針對(duì)全部文本而不是僅一處
'查找?guī)f(xié)議前綴(如http)的鏈接
re.pattern="((http|https|ftp):\/\/([\w-]+\.)+[\w]+(\/[\w-]+)*[\/]?([\w-]+\.[\w]+)?(\?[\w]+=[\w]+(&[\w]+=[\w]+)*)?)"
str=re.replace(str,"$1")
'查找不帶協(xié)議前綴的鏈接
re.pattern="([^\/])(www\.([\w-]+\.)+[\w]+(\/[\w-]+)*[\/]?([\w-]+\.[\w]+)?(\?[\w]+=[\w]+(&[\w]+=[\w]+)*)?)"
str=re.replace(str,"$1$2")
'查找郵件鏈接
re.pattern="(mailto:)?([\w]+@([\w-]+\.)+[\w]+)"
str=re.replace(str,"$1$2")
set re=nothing
str=trim(str)
autolink=str
end function
不過這個(gè)函數(shù)尚有一個(gè)缺欠,便是如果在無協(xié)議前綴的鏈接前加上“\”成為“\jinminghou.cn”便不能自動(dòng)鏈接了,希望以后能改正這一點(diǎn)。
下面介紹一下正則表達(dá)式的特殊字符:
“^”后接字符為字串開頭:如"^b"匹配"bing"而不匹配"abc"
“$”前接字符為字串末尾:如"g$"匹配"bing"而不匹配"fgh"
“*”前接字符重復(fù)0~n次:如"go*gle"匹配"ggle"和"goooogle"
“+”前接字符重復(fù)1~n次:如"go+gle"匹配"gogle"和"gooogle"而不匹配"ggle"
“?”前接字符重復(fù)0或1次:如"go?gle"匹配"ggle"和"gogle"而不匹配"gooogle"
“.”表示除換行符外的所有字符:如".b"匹配"ab","cb",".+"匹配不換行的所有字符串
“|”表示“或”:如"ab|cd"同時(shí)匹配"ab"和"cd"而不匹配"abcd"
“( )”表示一或多個(gè)字符,從前往后,圓括號(hào)中的匹配字符串依次以$1,……$9,……返回:如"(bi(ng)z)hu(o)"中,$1代表"bi(ng)z",$2代表"ng",$3代表"o"
“[ ]”中可有多個(gè)字符,但只表示其中一個(gè):如"[xyx]"匹配"x","y","z"但不匹配"xyz",等同于"x|y|z";另,"[abcde]"這種連續(xù)字符可簡(jiǎn)寫為"[a-e]","[abcde12345]"可簡(jiǎn)寫為"[a-e1-5]"
“[^ ]”表示除括號(hào)內(nèi)字符以外的單個(gè)字符:如"[^xyz]"匹配"w","a"而不匹配"x","y";"[^abcde]"亦可簡(jiǎn)寫為"[^a-e]"
“{n}”n為一數(shù)字,表示前接字符重復(fù)次數(shù):如"a{3}"表示"aaa"
“{n,}”表示前接字符至少重復(fù)n次:如"a{3}"匹配"aaa"和"aaaaa"而不匹配"aa"
“{n,m}”表示前接字符至少重復(fù)n次,至多重復(fù)m次
“\”為轉(zhuǎn)義字符,后接上述特殊字符時(shí)表示該字符:如"\?"表示"?","\["表示"["
“\w”匹配數(shù)字+字母+下劃線集合;“\w”匹配除“\w”外的其他字符
“\d”匹配單個(gè)數(shù)字,“\d”匹配非數(shù)字
該文章在 2010/7/22 22:54:09 編輯過