中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

正則表達式應用技巧四則
來源:易賢網 閱讀:990 次 日期:2014-09-05 11:51:13
溫馨提示:易賢網小編為您整理了“正則表達式應用技巧四則”,方便廣大網友查閱!

以前就想總結一下,一直沒有時間,今天看見了一篇好文,特此貢獻出來,盡情享受正則的強大功能吧!!

以下為正文內容:

------------------------------------------------------------

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

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

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

作為程序員,我們必須把上面對密碼格式的自然語言描述轉換成其他形式,使得ASP頁面能夠理解并應用它來防止非法的密碼輸入。描述這個密碼格式的正則表達式是:^[a-zA-Z]w{3,14}$。

在ASP應用里,我們可以把密碼驗證過程寫成可重用的函數,如下所示:

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}”。

密碼不能包含除字母、數字和下劃線以外的字符:正則表達式描述是“w”。

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

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

<%

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頁面提取內容所面臨的主要問題是,我們必須尋找一種方法精確地識別出自己想要的那一部分內容。例如,下面是一個顯示新聞標題的HTML代碼片斷:

<table border="0" width="11%" class="Somestory">

<tr>

<td width="100%">

<p align="center">其他內容...</td>

</tr>

</table>

<table border="0" width="11%" class="Headline">

<tr>

<td width="100%">

<p align="center">伊拉克戰爭!</td>

</tr>

</table>

<table border="0" width="11%" class="Someotherstory">

<tr>

<td width="100%">

<p align="center">其他內容...</td>

</tr>

</table>

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

<%

Dim re, strHTML

Set re = new RegExp ' 創建正則表達式對象

re.IgnoreCase = true

re.Global = false ' 第一次匹配之后結束查找

%>

下面考慮一下我們要提取的區域:在這里,我們要提取的是整個<table>結構,包括結束標記和新聞標題的文本。因此查找的起始字符應該是<table>開始標記: re.Pattern = "<table.*(?=Headline)"。這個正則表達式匹配表格的開始標記,能夠返回開始標記直至“Headline”之間的所有內容(換行除外)。下面是返回已匹配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片斷,正則表達式返回一次匹配的內容如下: <table border="0" width="11%" class="。正則表達式中的“(?=Headline)”沒有獲取字符,所以不能看到表格class屬性的值。要獲取表格剩余部分的代碼也相當簡單: re.Pattern = "<table.*(?=Headline)(.|n)*?</table>"。其中:“(.|n)”后面的“*”匹配0個到多個任意字符;而“?”使得“*”匹配范圍最小化,即在找到表達式的下一部分之前匹配盡可能少的字符。</table>是表格的結束標記。

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

<table border="0" width="11%" class="Headline">

<tr>

<td width="100%">

<p align="center">伊拉克戰爭!</td>

</tr>

</table>

<table border="0" width="11%" class="Someotherstory">

<tr>

<td width="100%">

<p align="center">其他內容...</td>

</tr>

</table>

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

本例假設了一些相當理想化的前提。實際應用中情況往往要復雜得多,特別是你對正在使用的源HTML代碼的編寫沒有任何影響力時,編寫ASP代碼尤為困難。最有效的方法是,多花些時間分析待提取內容附近的HTML,經常地測試,確保提取出來的內容正是自己所需要的。另外,應當重視并處理正則表達式不能匹配源HTML頁面任何內容的情形。內容的更新可能非常快速,不要只因為別人改變了內容的格式而讓自己的頁面出現低級可笑的錯誤。

----------------------------------------------------

三、解析文本數據文件

數據文件的格式和種類很多,XML文檔、結構化文本甚至非結構化文本都經常成為ASP應用的數據源。下面我們要看的一個例子是使用限定符的結構化文本文件。限定符(比如引號)表示字符串各個部分不可分割,即使字符串內部包含把記錄分隔成字段的分隔符也一樣。

下面是一個簡單的結構化文本文件:

姓,名, 電話, 說明

孫,悟空, 312 555 5656, ASP很好

豬,八戒, 847 555 5656, 我是電影制片人

這個文件非常簡單,它的第一行是標題,下面兩行是用逗號作為分隔符的記錄。要解析這個文件也很簡單,只需先把文件分割成行(根據換行符號),然后把各個記錄按照字段分割。但是,如果我們在某個字段內容中加入了逗號:

姓,名, 電話, 說明

孫,悟空, 312 555 5656, 我喜歡ASP,還有VB和SQL

豬,八戒, 847 555 5656, 我是電影制片人

解析第一個記錄時就會出現問題,因為在只認可逗號分隔符的解析器看來它的最后一個字段包含了兩個字段的內容。為了避免出現這類問題,包含分隔符的字段必須用限定符包圍。單引號就是一種常用的限定符。把上面的文本文件加上單引號限定符之后,它的內容如下所示:

姓,名, 電話, 說明

孫,悟空, 312 555 5656, '我喜歡ASP,還有VB和SQL'

豬,八戒, 847 555 5656, '我是電影制片人'

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

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

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

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

, 尋找一個逗號

(?= 繼續向前查找以匹配下面這個模式:

( 開始一個新的模式

[^']*' [非引號字符]0個或者多個,然后是一個引號

[^']*'[^']*) [非引號字符]0個或者多個,然后是一個引號。結合前面的內容之后它匹配引號對

)* 結束模式并匹配整個模式(引號對)0次或者多次

(?! 向前查找,排除此模式

[^']*' [非引號字符]0個或者多個,然后是一個引號

) 結束模式

下面是一個VBScript函數,它接受一個字符串參數,根據字符串中的逗號分隔符、單引號限定符分割字符串,返回結果數組:

Function SplitAdv(strInput)

Dim objRE

Set objRE = new RegExp

' 設置RegExp對象

objRE.IgnoreCase = true

objRE.Global = true

objRE.Pattern = ",(?=([^']*'[^']*')*(?![^']*'))"

' Replace方法用chr(8)替換我們要用到的逗號,chr(8)即b

' 字符,b在字符串中出現的可能極為微小。

' 然后我們根據b把字符串分割保存到數組

SplitAdv = Split(objRE.Replace(strInput, "b"), "b")

End Function

總而言之,用正則表達式解析文本數據文件具有高效、縮短開發時間的優點,能夠節省大量分析文件、根據復雜的條件提取有用數據的時間。在一個迅速發展的環境中仍會有許多傳統的數據可資利用,掌握如何構造高效的數據分析例程將是一種寶貴的技能。

-------------------------------------------------------------------

四、字符串替換

在最后一個例子中我們要看看VBScript正則表達式的替換功能。ASP經常用于動態地格式化從各種數據源獲得的文本。利用VBScript正則表達式的強大功能,ASP能夠動態地改變匹配的復雜文本。通過加入HTML標記突出顯示部分單詞就是一種常見的應用,比如突出顯示搜索結果中的搜索關鍵詞。

為說明實現方法,下面我們來看一個突出顯示字符串中所有“.NET”的例子。這個字符串可以從任何地方獲得,比如數據庫或者其他Web網站。

<%

Set regEx = New RegExp

regEx.Global = true

regEx.IgnoreCase = True

' 正則表達式模式,

' 尋找任何結尾為“.NET”的單詞或者URL。

regEx.Pattern = "(b[a-zA-Z._]+?.NETb)"

' 用于測試替換功能的字符串

strText = "微軟建立了一個新網站www.ASP.NET。"

' 調用正則表達式的Replace方法

' $1表示把匹配的文本插入當前位置

Response.Write regEx.Replace(strText, _

"<b style='color: #000099; font-size: 18pt'>$1</b>")

%>

這個例子中有幾個重要的地方必須注意。整個正則表達式被放入了一對圓括號中,它的作用是截取所有匹配的內容供以后使用,這些內容在替換文本中通過$1引用。類似的截取每次替換可以使用多達9個,分別通過$1到$9引用。正則表達式的Replace方法和VBScript本身的Replace函數不同,它只需要兩個參數:被搜索的文本,替換用的文本。

在這個例子中,為了突出顯示搜索到的“.NET”字符串,我們用粗體標記以及其他樣式屬性來包圍這些字符串。使用這種搜索和替換技術,我們能夠方便地為網站搜索程序加上突出顯示搜索關鍵詞的功能,或者自動為頁面中出現的關鍵詞加上指向其他頁面的鏈接。

結束語

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

更多信息請查看IT技術專欄

更多信息請查看網絡編程
易賢網手機網站地址:正則表達式應用技巧四則
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!

2026上岸·考公考編培訓報班

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
云南網警備案專用圖標
聯系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網
云南網警報警專用圖標
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
久久久久久伊人| 欧美日韩亚洲视频| 99精品欧美一区二区蜜桃免费| 国产一区香蕉久久| 91久久精品国产91久久| 亚洲一区成人| 久久精品国产69国产精品亚洲| 久久久久国产精品午夜一区| 久久裸体视频| 国产精品卡一卡二| 亚洲激情六月丁香| 欧美一区网站| 国产精品婷婷午夜在线观看| 国产欧美亚洲日本| 亚洲一区二区不卡免费| 欧美成人首页| 136国产福利精品导航| 性做久久久久久久免费看| 欧美日韩1234| 日韩香蕉视频| 欧美国产日韩一区| 精品动漫3d一区二区三区免费版 | 性感少妇一区| 亚洲欧美日韩国产精品 | 国产精品国产三级国产a| 欧美亚州一区二区三区 | 欧美特黄a级高清免费大片a级| 欧美日韩一区综合| 在线观看91精品国产麻豆| 亚洲午夜精品一区二区三区他趣| 久久国产精品第一页| 欧美视频在线观看视频极品| 亚洲国产va精品久久久不卡综合| 亚洲综合999| 国产精品久久久久久久一区探花 | 久久不射网站| 国产情侣一区| 欧美伊人精品成人久久综合97| 欧美日韩在线观看一区二区三区| 激情久久综艺| 欧美亚洲一区| 国产亚洲精品福利| 亚洲欧美视频在线观看| 欧美日韩一区二区视频在线观看| 亚洲精品日韩综合观看成人91| 老鸭窝91久久精品色噜噜导演| 国产一区二区黄| 久久免费视频网| 1024日韩| 欧美日韩极品在线观看一区| 一区二区三区免费观看| 欧美日韩精品免费观看视频| 亚洲精品久久久久久久久久久久久| 老色鬼精品视频在线观看播放| 黄色亚洲精品| 欧美激情亚洲国产| 亚洲午夜电影网| 国产综合婷婷| 欧美激情亚洲另类| 欧美在线观看视频一区二区三区| 黄色国产精品一区二区三区| 欧美岛国激情| 久久久噜噜噜久久狠狠50岁| 日韩视频一区二区三区| 国产麻豆日韩| 久热精品视频在线免费观看| 在线亚洲+欧美+日本专区| 激情久久一区| 狠狠色狠狠色综合| 欧美日本在线| 亚洲欧美另类在线观看| 99视频精品在线| 亚洲高清毛片| 亚洲第一精品夜夜躁人人躁 | 激情欧美亚洲| 国产精品自拍网站| 国产精品久久久久国产精品日日 | 欧美一区二区三区免费观看视频 | 国产精品久久久久免费a∨| 麻豆乱码国产一区二区三区| 午夜精品一区二区三区在线| 亚洲午夜影视影院在线观看| 亚洲免费成人av| 亚洲日本一区二区| 日韩视频欧美视频| 日韩一区二区电影网| 一区二区三区国产盗摄| 亚洲天堂av图片| 欧美一区二区播放| 久久综合狠狠综合久久综合88| 久久综合网hezyo| 欧美成年人在线观看| 欧美欧美天天天天操| 欧美私人网站| 伊人久久婷婷| 夜夜嗨一区二区三区| 夜夜嗨av一区二区三区网页| 亚洲欧美春色| 美女免费视频一区| 国产精品美女视频网站| 国内精品视频久久| 国产精品xxxxx| 国产日韩欧美一二三区| 亚洲福利视频网| 亚洲综合导航| 欧美日韩国产成人| 91久久嫩草影院一区二区| 亚洲视频在线观看三级| 久久久久久国产精品一区| 欧美人与禽性xxxxx杂性| 韩国女主播一区二区三区| 亚洲伊人网站| 欧美亚韩一区| 一区二区三区视频在线播放| 久久综合婷婷| 国产午夜精品久久久久久免费视 | 日韩亚洲欧美在线观看| 日韩视频免费在线观看| 久久久久久久久久久成人| 国产精品视频久久一区| 亚洲高清av| 男人的天堂亚洲在线| 亚洲二区免费| 欧美电影免费观看| 91久久精品国产91久久| 免费日韩av电影| 欧美经典一区二区三区| 亚洲欧洲精品一区二区三区 | 亚洲福利专区| 欧美成人黑人xx视频免费观看| 在线观看亚洲精品| 国产免费观看久久黄| 亚洲一区二区三区在线视频| 国产欧美视频一区二区三区| 另类专区欧美制服同性| 艳女tv在线观看国产一区| 国产精品免费网站| 欧美大片免费久久精品三p| 午夜精品成人在线| 亚洲狼人综合| 伊甸园精品99久久久久久| 国产精品激情电影| 欧美日韩激情小视频| 欧美va亚洲va日韩∨a综合色| 亚洲欧美综合v| 欧美午夜精品久久久| 欧美国产视频一区二区| 久久久久国产精品麻豆ai换脸| 亚洲伊人网站| 中文久久乱码一区二区| 亚洲精品美女免费| 在线日韩视频| 狠狠色伊人亚洲综合网站色| 国产视频久久网| 国产免费成人av| 精品动漫3d一区二区三区| 国产麻豆综合| 国产亚洲欧美另类一区二区三区| 欧美日韩在线直播| 国产精品久久福利| 国产日韩亚洲欧美| 伊人婷婷欧美激情| 亚洲激情在线播放| 99这里只有久久精品视频| 亚洲精品免费一二三区| 99亚洲一区二区| 午夜视频久久久久久| 欧美一站二站| 蜜桃久久av| 国产精品久久77777| 国产一级揄自揄精品视频| 韩日成人av| aⅴ色国产欧美| 久久成年人视频| 亚洲免费视频一区二区| 久久久久久97三级| 欧美日本网站| 国内精品伊人久久久久av影院| 亚洲大胆人体在线| 亚洲欧美日韩国产综合| 美国十次成人| 国产精品网站在线播放| 亚洲理论在线观看| 女生裸体视频一区二区三区| 欧美国产日韩在线| 欧美视频第二页| 亚洲黄色一区| 免费视频一区二区三区在线观看| 欧美三区美女| 亚洲精品久久久久久久久久久| 亚洲欧美日韩国产另类专区| 欧美精品aa| 亚洲精品欧美| 欧美精品一区在线播放| 在线看无码的免费网站| 久久免费精品视频| 极品少妇一区二区三区| 久久久精品日韩| 狠狠v欧美v日韩v亚洲ⅴ| 久久人人97超碰人人澡爱香蕉|