婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 正則表達式在網(wǎng)頁處理中的應(yīng)用四則

正則表達式在網(wǎng)頁處理中的應(yīng)用四則

熱門標簽:知名的電話機器人 錫林郭勒盟地圖標注位置 電銷機器人公司簡介 RO地圖標注app 百音電話機器人 高德地圖標注短信簽約 福州工作銷售電話機器人 湖南企業(yè)智能外呼系統(tǒng)供應(yīng)商 自制電銷機器人

正則表達式(Regular Expression)為字符串模式匹配提供了一種高效、方便的方法。幾乎所有高級語言都提供了對正則表達式的支持,或者提供了現(xiàn)成的代碼庫供調(diào)用。本文以ASP環(huán)境中常見的處理任務(wù)為例,介紹正則表達式的應(yīng)用技巧。

一、檢驗密碼和郵件地址的格式

我們的第一個實例示范正則表達式的一項基本功能:抽象地描述任意復(fù)雜的字符串。它的意思就是,正則表達式給予程序員一種形式化的字符串描述方法,只需很少的代碼即可描述出應(yīng)用遇到的任意字符串模式。例如,對于不從事技術(shù)工作的人來說,密碼格式的要求可以描述如下:密碼的第一個字符必須是字母,密碼最少4個字符且不超過15個字符,密碼不能包含除字母、數(shù)字和下劃線以外的字符。

作為程序員,我們必須把上面對密碼格式的自然語言描述轉(zhuǎn)換成其他形式,使得ASP頁面能夠理解并應(yīng)用它來防止非法的密碼輸入。描述這個密碼格式的正則表達式是:^[a-zA-Z]\w{3,14}$。在ASP應(yīng)用里,我們可以把密碼驗證過程寫成可重用的函數(shù),如下所示:

Function TestPassword(strPassword)
Dim re
Set re = new RegExp
re.IgnoreCase = false
re.global = false
re.Pattern = "^[a-zA-Z]\w{3,14}$"
TestPassword = re.Test(strPassword)
End Function

下面我們把這個檢驗密碼格式的正則表達式和自然語言描述對比著看看:
密碼的第一個字符必須是字母:正則表達式描述是“^[a-zA-Z]”,其中“^”表示字符串的開始,連字符告訴RegExp匹配指定范圍的所有字符。
密碼最少4個字符且不超過15個字符:正則表達式描述是“{3,14}”。
密碼不能包含除字母、數(shù)字和下劃線以外的字符:正則表達式描述是“\w”。

幾點說明:{3,14}表示前面的模式匹配至少3個、但不超過14個的字符(加上第一個字符就成了4到15個字符)。注意花括號內(nèi)的語法要求極其嚴格,不允許在逗號的兩邊加入空格。如果加入了空格,它將對正則表達式的含義產(chǎn)生影響,導(dǎo)致密碼格式檢驗時產(chǎn)生錯誤。另外,上面的正則表達式末尾也沒有加上“$”字符。$字符使得正則表達式匹配字符串直至末尾,確保合法的密碼后面沒有加上任何其他字符。

類似于密碼格式檢驗,檢查email地址的合法性也是一個很常見的問題,用正則表達式進行簡單的email地址檢驗可以實現(xiàn)如下:

<%
Dim re
Set re = new RegExp
re.pattern = "^\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,3}$"
Response.Write re.Test("aabb@yahoo.com")
%>

二、提取HTML頁面的特定部分

從HTML頁面提取內(nèi)容所面臨的主要問題是,我們必須尋找一種方法精確地識別出自己想要的那一部分內(nèi)容。例如,下面是一個顯示新聞標題的HTML代碼片斷:

<table border="0" width="11%" class="Somestory">
<tr>
<td width="100%">
<p align="center">其他內(nèi)容...</td>
</tr>
</table>
<table border="0" width="11%" class="Headline">
<tr>
<td width="100%">
<p align="center">伊拉克戰(zhàn)爭!</td>
</tr>
</table>
<table border="0" width="11%" class="Someotherstory">
<tr>
<td width="100%">
<p align="center">其他內(nèi)容...</td>
</tr>
</table>

觀察上述代碼,很容易看出新聞標題由位于中間的表格顯示,它的class屬性設(shè)置為Headline。如果HTML頁面非常復(fù)雜,使用Microsoft IE從5.0開始提供的一項附加功能可以只查看被選中部分頁面的HTML代碼,請訪問http://www.microsoft.com/Windows/ie/WebAccess/default.ASP了解詳情。對于本例,我們假定這是唯一class屬性設(shè)置為Headline的表格。現(xiàn)在我們要創(chuàng)建正則表達式,通過正則表達式找到這個Headline表格并把這個表格包含到自己的頁面中。首先是編寫支持正則表達式的代碼:

<%
Dim re, strHTML
Set re = new RegExp ' 創(chuàng)建正則表達式對象
re.IgnoreCase = true
re.Global = false ' 第一次匹配之后結(jié)束查找
%>

下面考慮一下我們要提取的區(qū)域:在這里,我們要提取的是整個<table>結(jié)構(gòu),包括結(jié)束標記和新聞標題的文本。因此查找的起始字符應(yīng)該是<table>開始標記: re.Pattern = "<table.*(?=Headline)"。

這個正則表達式匹配表格的開始標記,能夠返回開始標記直至“Headline”之間的所有內(nèi)容(換行除外)。下面是返回已匹配HTML代碼的方法:

' 把所有匹配的HTML代碼放入Matches集合
Set Matches = re.Execute(strHTML)
' 顯示所有匹配的HTML代碼
For Each Item in Matches
Response.Write Item.Value
Next
' 顯示其中一項
Response.write Matches.Item(0).Value

運行這段代碼處理前面顯示的HTML片斷,正則表達式返回一次匹配的內(nèi)容如下: <table border="0" width="11%" class="。正則表達式中的“(?=Headline)”沒有獲取字符,所以不能看到表格class屬性的值。

要獲取表格剩余部分的代碼也相當(dāng)簡單: re.Pattern = "<table.*(?=Headline)(.|\n)*?</table>"。其中:“(.|\n)”后面的“*”匹配0個到多個任意字符;而“?”使得“*”匹配范圍最小化,即在找到表達式的下一部分之前匹配盡可能少的字符。</table>是表格的結(jié)束標記。

“?”限制符非常重要,它防止了表達式返回其他表格的代碼。例如對于前面給出的HTML代碼片斷,如果刪除這個“?”則返回內(nèi)容將是:

<table border="0" width="11%" class="Headline">
<tr>
<td width="100%">
<p align="center">伊拉克戰(zhàn)爭!</td>
</tr>
</table>
<table border="0" width="11%" class="Someotherstory">
<tr>
<td width="100%">
<p align="center">其他內(nèi)容...</td>
</tr>
</table>

返回的內(nèi)容不僅包含了Headline表的<table>標記,而且還包含了Someotherstory表格,由此可以看出,這里的“?”是必不可少的。

本例假設(shè)了一些相當(dāng)理想化的前提。實際應(yīng)用中情況往往要復(fù)雜得多,特別是你對正在使用的源HTML代碼的編寫沒有任何影響力時,編寫ASP代碼尤為困難。最有效的方法是,多花些時間分析待提取內(nèi)容附近的HTML,經(jīng)常地測試,確保提取出來的內(nèi)容正是自己所需要的。

另外,應(yīng)當(dāng)重視并處理正則表達式不能匹配源HTML頁面任何內(nèi)容的情形。內(nèi)容的更新可能非常快速,不要只因為別人改變了內(nèi)容的格式而讓自己的頁面出現(xiàn)低級可笑的錯誤。

三、解析文本數(shù)據(jù)文件
數(shù)據(jù)文件的格式和種類很多,XML文檔、結(jié)構(gòu)化文本甚至非結(jié)構(gòu)化文本都經(jīng)常成為ASP應(yīng)用的數(shù)據(jù)源。下面我們要看的一個例子是使用限定符的結(jié)構(gòu)化文本文件。限定符(比如引號)表示字符串各個部分不可分割,即使字符串內(nèi)部包含把記錄分隔成字段的分隔符也一樣。 下面是一個簡單的結(jié)構(gòu)化文本文件:

姓,名, 電話, 說明
孫,悟空, 312 555 5656, ASP很好
豬,八戒, 847 555 5656, 我是電影制片人
這個文件非常簡單,它的第一行是標題,下面兩行是用逗號作為分隔符的記錄。要解析這個文件也很簡單,只需先把文件分割成行(根據(jù)換行符號),然后把各個記錄按照字段分割。但是,如果我們在某個字段內(nèi)容中加入了逗號:
姓,名, 電話, 說明
孫,悟空, 312 555 5656, 我喜歡ASP,還有VB和SQL
豬,八戒, 847 555 5656, 我是電影制片人
解析第一個記錄時就會出現(xiàn)問題,因為在只認可逗號分隔符的解析器看來它的最后一個字段包含了兩個字段的內(nèi)容。為了避免出現(xiàn)這類問題,包含分隔符的字段必須用限定符包圍。單引號就是一種常用的限定符。把上面的文本文件加上單引號限定符之后,它的內(nèi)容如下所示:
姓,名, 電話, 說明
孫,悟空, 312 555 5656, '我喜歡ASP,還有VB和SQL'
豬,八戒, 847 555 5656, '我是電影制片人'

現(xiàn)在我們能夠肯定哪一個逗號是分隔符、哪一個逗號是字段內(nèi)容了,即只需把引號內(nèi)部出現(xiàn)的逗號視為字段的內(nèi)容。接下來我們要做的就是實現(xiàn)一個正則表達式解析器,由這個解析器確定何時根據(jù)逗號分割字段、何時把逗號視為字段內(nèi)容。

這里的問題與大多數(shù)正則表達式所面臨的略有不同。通常我們查看的是文本的一小部分,看看它是否能夠和正則表達式匹配。但在這里,只有考慮了整行文本之后我們才能可靠地判斷出哪些內(nèi)容位于引號之內(nèi)。

下面是一個說明該問題的例子。從某個文本文件隨意抽取半行內(nèi)容,得到:1, 沙灘, 黑色, 21, ', 狗, 貓, 鴨子, ', 。在這個例子中,因為“1”的左邊還有其他數(shù)據(jù),要解析清楚它的內(nèi)容是極其困難的。我們不知道這個數(shù)據(jù)片斷的前面有多少單引號,從而也就無法判斷哪些字符位于引號之內(nèi)(在引號之內(nèi)的文本解析時不能分割)。如果這個數(shù)據(jù)片斷之前有偶數(shù)個(或者沒有)單引號,那么“', 狗, 貓, 鴨子, '”是用引號界定的字符串且不可分割。如果前面的引號數(shù)量是奇數(shù),那么“1, 沙灘, 黑色, 21, '”是某個字符串的結(jié)束部分且不可分割。

因此,正則表達式必須分析整行文本,全面考慮出現(xiàn)了多少引號才能確定字符是處在引號對的內(nèi)部還是外部,即:,(?=([^']*'[^']*')*(?![^']*'))。這個正則表達式首先找到一個引號,然后繼續(xù)查找并保證逗號后面的單引號數(shù)量或者是偶數(shù)、或者是0。該正則表達式以下面這個判斷為基礎(chǔ):如果逗號后面的單引號數(shù)量是偶數(shù),那么這個逗號位于字符串之外。下表給出了更詳細的說明:

, 尋找一個逗號
(?= 繼續(xù)向前查找以匹配下面這個模式:
( 開始一個新的模式
[^']*' [非引號字符]0個或者多個,然后是一個引號
[^']*'[^']*) [非引號字符]0個或者多個,然后是一個引號。結(jié)合前面的內(nèi)容之后它匹配引號對
)* 結(jié)束模式并匹配整個模式(引號對)0次或者多次
(?! 向前查找,排除此模式
[^']*' [非引號字符]0個或者多個,然后是一個引號
) 結(jié)束模式
下面是一個VBScript函數(shù),它接受一個字符串參數(shù),根據(jù)字符串中的逗號分隔符、單引號限定符分割字符串,返回結(jié)果數(shù)組:
Function SplitAdv(strInput)
Dim objRE
Set objRE = new RegExp
' 設(shè)置RegExp對象
objRE.IgnoreCase = true
objRE.Global = true
objRE.Pattern = ",(?=([^']*'[^']*')*(?![^']*'))"
' Replace方法用chr(8)替換我們要用到的逗號,chr(8)即\b
' 字符,\b在字符串中出現(xiàn)的可能極為微小。
' 然后我們根據(jù)\b把字符串分割保存到數(shù)組
SplitAdv = Split(objRE.Replace(strInput, "\b"), "\b")
End Function

總而言之,用正則表達式解析文本數(shù)據(jù)文件具有高效、縮短開發(fā)時間的優(yōu)點,能夠節(jié)省大量分析文件、根據(jù)復(fù)雜的條件提取有用數(shù)據(jù)的時間。在一個迅速發(fā)展的環(huán)境中仍會有許多傳統(tǒng)的數(shù)據(jù)可資利用,掌握如何構(gòu)造高效的數(shù)據(jù)分析例程將是一種寶貴的技能。

四、字符串替換

在最后一個例子中我們要看看VBScript正則表達式的替換功能。ASP經(jīng)常用于動態(tài)地格式化從各種數(shù)據(jù)源獲得的文本。利用VBScript正則表達式的強大功能,ASP能夠動態(tài)地改變匹配的復(fù)雜文本。通過加入HTML標記突出顯示部分單詞就是一種常見的應(yīng)用,比如突出顯示搜索結(jié)果中的搜索關(guān)鍵詞。
為說明實現(xiàn)方法,下面我們來看一個突出顯示字符串中所有“.NET”的例子。這個字符串可以從任何地方獲得,比如數(shù)據(jù)庫或者其他Web網(wǎng)站。

<%
Set regEx = New RegExp
regEx.Global = true
regEx.IgnoreCase = True
' 正則表達式模式,
' 尋找任何結(jié)尾為“.NET”的單詞或者URL。
regEx.Pattern = "(\b[a-zA-Z\._]+?\.NET\b)"
' 用于測試替換功能的字符串
strText = "微軟建立了一個新網(wǎng)站www.ASP.NET。"
' 調(diào)用正則表達式的Replace方法
' $1表示把匹配的文本插入當(dāng)前位置
Response.Write regEx.Replace(strText, _
"<b style='color: #000099; font-size: 18pt'>$1</b>")
%>

這個例子中有幾個重要的地方必須注意。整個正則表達式被放入了一對圓括號中,它的作用是截取所有匹配的內(nèi)容供以后使用,這些內(nèi)容在替換文本中通過$1引用。類似的截取每次替換可以使用多達9個,分別通過$1到$9引用。正則表達式的Replace方法和VBScript本身的Replace函數(shù)不同,它只需要兩個參數(shù):被搜索的文本,替換用的文本。
在這個例子中,為了突出顯示搜索到的“.NET”字符串,我們用粗體標記以及其他樣式屬性來包圍這些字符串。使用這種搜索和替換技術(shù),我們能夠方便地為網(wǎng)站搜索程序加上突出顯示搜索關(guān)鍵詞的功能,或者自動為頁面中出現(xiàn)的關(guān)鍵詞加上指向其他頁面的鏈接。

結(jié)束語

希望本文介紹的幾種正則表達式技巧對你在何時、如何應(yīng)用正則表達式有所啟發(fā)。雖然本文的例子用VBScript編寫,但在ASP.NET中正則表達式同樣也大有用武之地,它是服務(wù)器端控件表單檢驗的主要機制之一,而且通過System.Text.RegularExpressions命名空間導(dǎo)出到了整個.NET框架之中。(

您可能感興趣的文章:
  • asp.net(c#) 使用Rex正則來生成字符串?dāng)?shù)組的代碼
  • asp.net驗證一個字符串是否符合指定的正則表達式
  • asp.net中利用正則表達式判斷一個字符串是否為數(shù)字的代碼

標簽:昆明 玉林 西寧 吉林 秦皇島 茂名 怒江 河北

巨人網(wǎng)絡(luò)通訊聲明:本文標題《正則表達式在網(wǎng)頁處理中的應(yīng)用四則》,本文關(guān)鍵詞  正則,表達式,在,網(wǎng)頁,處理,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《正則表達式在網(wǎng)頁處理中的應(yīng)用四則》相關(guān)的同類信息!
  • 本頁收集關(guān)于正則表達式在網(wǎng)頁處理中的應(yīng)用四則的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    欧美午夜视频网站| 中文在线一区二区| 久久国产生活片100| 精品一区精品二区高清| 成人性生交大片免费看视频在线 | 精品视频一区二区不卡| 欧美人狂配大交3d怪物一区| 欧美一二三四区在线| 中文字幕亚洲电影| 天天影视色香欲综合网老头| 国产一区欧美日韩| 一本久久a久久精品亚洲| 欧美精品高清视频| 久久久久国产成人精品亚洲午夜| 亚洲自拍偷拍麻豆| 丁香啪啪综合成人亚洲小说 | av影院午夜一区| 久久免费视频一区| 国产成人午夜高潮毛片| 欧美不卡123| 午夜精品在线看| 日韩一二三四区| 不卡视频在线观看| 国产无一区二区| 麻豆精品国产传媒mv男同| 色综合久久中文综合久久牛| 亚洲国产精品一区二区尤物区| 成人成人成人在线视频| 夜夜爽夜夜爽精品视频| 91亚洲精品久久久蜜桃网站| 久久精品免费在线观看| 日本乱码高清不卡字幕| 亚洲精品成人a在线观看| 国产成人av影院| 一区二区三区波多野结衣在线观看| 69精品人人人人| 日韩电影一二三区| 欧美另类z0zxhd电影| 国产尤物一区二区| 午夜国产精品一区| 中文字幕一区二区三中文字幕| 91精品国产色综合久久不卡电影| 日韩电影在线免费观看| 国产精品久久久久久久浪潮网站| 国产91精品免费| 日韩精品1区2区3区| 精品sm捆绑视频| 久久成人免费电影| 一区二区视频在线| 日本一区二区视频在线| 成人午夜激情片| 日韩国产高清影视| 丝袜亚洲另类欧美综合| 亚洲乱码国产乱码精品精可以看 | 日韩欧美中文字幕公布| 欧美性大战久久久| 色嗨嗨av一区二区三区| 91老司机福利 在线| 国产精品123| 国产精品系列在线播放| 亚洲三级在线免费| 欧美精品三级日韩久久| 91成人看片片| 欧美在线制服丝袜| 精久久久久久久久久久| 五月婷婷欧美视频| 日本亚洲视频在线| 日韩专区在线视频| 免费成人深夜小野草| 亚洲日本乱码在线观看| 国产精品久久久久婷婷| 亚洲欧洲国产专区| 亚洲综合免费观看高清完整版在线 | 国产精品18久久久久久久久| 久久国产生活片100| 国产精品一二三在| 成人免费av网站| 菠萝蜜视频在线观看一区| 94色蜜桃网一区二区三区| 日韩av中文在线观看| 蜜臀av性久久久久蜜臀aⅴ四虎| 日韩有码一区二区三区| 免费观看30秒视频久久| 国产精品一区二区久久精品爱涩| 欧美亚洲国产一卡| 欧美经典三级视频一区二区三区| 久久久久国产精品人| 日韩av电影一区| 欧美精品亚洲二区| 另类的小说在线视频另类成人小视频在线 | 日本一区二区三区在线不卡| 国内久久精品视频| 国产成人午夜精品影院观看视频| 久久久久久免费毛片精品| 国产91精品入口| 五月天一区二区三区| 2022国产精品视频| 午夜免费欧美电影| 久久久综合视频| 欧美日韩在线精品一区二区三区激情| 美脚の诱脚舐め脚责91| 中文字幕av不卡| 91麻豆精品国产91久久久久| 成人午夜视频在线观看| 精品一区二区三区免费观看| 樱桃国产成人精品视频| 久久久.com| 国产午夜精品一区二区| 日韩欧美综合一区| 91精品国产综合久久精品麻豆| 91在线国内视频| 欧美视频一二三区| 色哟哟国产精品| 色婷婷精品久久二区二区蜜臀av| 成人午夜看片网址| 国产电影一区在线| av一本久道久久综合久久鬼色| 国产精品一区不卡| 成人免费视频一区| 91麻豆精品在线观看| 欧美特级限制片免费在线观看| 成人午夜碰碰视频| 91亚洲精华国产精华精华液| 色素色在线综合| 日韩女优av电影| 成人国产精品免费网站| 91麻豆免费观看| 日韩免费福利电影在线观看| 2020国产精品| 亚洲国产一区二区视频| 精品一区二区在线观看| 91蜜桃在线免费视频| 欧美精品久久99久久在免费线| 久久婷婷综合激情| 日韩福利电影在线观看| 91在线视频网址| 国产午夜精品在线观看| 亚洲第一主播视频| 国产精品电影一区二区| 日韩电影免费在线观看网站| 成人av电影在线观看| 久久精品在线观看| 国产曰批免费观看久久久| 欧美精品色综合| 一卡二卡三卡日韩欧美| 97久久久精品综合88久久| 久久精品视频在线看| 久久国产综合精品| 欧美本精品男人aⅴ天堂| 麻豆精品在线视频| 精品国精品国产| 国产老妇另类xxxxx| 欧美精品一区二区三区蜜臀| 毛片av中文字幕一区二区| 日韩欧美国产一二三区| 日韩电影一区二区三区四区| 91精品国产综合久久精品性色| 亚洲成年人网站在线观看| 色拍拍在线精品视频8848| 亚洲成人综合网站| 91精品国产综合久久久蜜臀粉嫩 | 一区二区三区在线观看视频| 欧美男同性恋视频网站| 亚洲午夜精品网| 精品国产一区二区三区忘忧草| 蜜桃av噜噜一区二区三区小说| www国产亚洲精品久久麻豆| 91论坛在线播放| 精品一区二区三区蜜桃| 亚洲自拍偷拍欧美| ...av二区三区久久精品| 宅男在线国产精品| 成人黄色在线看| 精品一区二区三区在线播放| 亚洲欧洲精品成人久久奇米网| 7777女厕盗摄久久久| 色噜噜久久综合| av电影在线观看完整版一区二区| 亚洲成人av资源| 中文字幕永久在线不卡| 久久久久久久久蜜桃| 欧美mv日韩mv亚洲| 欧美一区二区三区免费大片| 91视频www| 粉嫩蜜臀av国产精品网站| 激情综合网最新| 久久不见久久见中文字幕免费| 日韩国产高清影视| 美女一区二区视频| 久久国产三级精品| 国产老妇另类xxxxx| 国产高清精品网站| 成人a区在线观看| 日本久久一区二区三区| 欧美三级电影在线观看| 91精品国产综合久久久久| 精品国产成人在线影院| 久久亚洲精品国产精品紫薇 | 色一情一乱一乱一91av| 欧美日韩久久一区二区|