ASP中Regex的應用(一)

來源:互聯網
上載者:User
正則   一、Regex概述
  二、Regex在VBScript中的應用
  三、Regex在VavaScript中的應用
  四、樣本
  五、總結

  一、Regex概述
  如果原來沒有使用過Regex,那麼可能對這個術語和概念會不太熟悉。不過,它們並不是您想象的那麼新奇。
  請回想一下在硬碟上是如何尋找檔案的。您肯定會使用 ? 和 * 字元來協助尋找您正尋找的檔案。? 字元匹配檔案名稱中的單個字元,而 * 則匹配一個或多個字元。一個如 'data?.dat' 的模式可以找到下述檔案:data1.dat、data2.dat等等。如果使用 * 字元代替 ? 字元,則將擴大找到的檔案數量。'data*.dat' 可以匹配下述所有檔案名稱:data.dat、data1.dat、data12.dat等等,儘管這種搜尋檔案的方法肯定很有用,但也十分有限。? 和 * 萬用字元的有限能力可以使你對Regex能做什麼有一個概念,不過Regex的功能更強大,也更靈活。
  在我們編寫ASP程式時,經常會判斷一個字串的有效性,如;一個串是否是數字、是否是有效Email地址等等。如果不使用Regex,那麼判斷的程式會很長,並且容易出錯,如果使用Regex,這些判斷就是一件很輕鬆的工作了。後面我們將介紹如何判斷數字和Email地址的有效性。
  在典型的搜尋和替換操作中,必須提供要尋找的確切文字。這種技術對於靜態文本中的簡單搜尋和替換任務可能足夠了,但是由於它缺乏靈活性,因此在搜尋動態文本時就有困難了,甚至是不可能的。
  使用Regex,能完成些什麼事情呢?
  測試字串的某個模式。例如,可以對一個輸入字串進行測試,看在該字串是否存在一個電話號碼模式或一個信用卡號碼模式。這稱為資料有效性驗證。
  替換文本。可以在文檔中使用一個Regex來標識特定文字,然後可以全部將其刪除,或者替換為別的文字。
  根據模式比對從字串中提取一個子字串。可以用來在文本或輸入欄位中尋找特定文字。
  例如,如果需要搜尋整個 web 網站來刪除某些過時的材料並替換某些HTML 格式化標記,則可以使用Regex對每個檔案進行測試,看在該檔案中是否存在所要尋找的材料或 HTML 格式化標記。用這個方法,就可以將受影響的檔案範圍縮小到包含要刪除或更改的材料的那些檔案。然後可以使用Regex來刪除過時的材料,最後,可以再次使用Regex來尋找並替換那些需要替換的標記。
  那麼,Regex文法的文法是如何呢?
  一個Regex就是由一般字元(例如字元 a 到 z)以及特殊字元(稱為元字元)組成的文字模式。該模式描述在尋找文字主體時待匹配的一個或多個字串。Regex作為一個模板,將某個字元模式與所搜尋的字串進行匹配。
  這裡有一些可能會遇到的Regex樣本:
  /^\[ \t]*$/ "^\[ \t]*$" 匹配一個空白行。
  /\d{2}-\d{5}/ "\d{2}-\d{5}" 驗證一個識別碼是否由一個2位元字,一個連字號以及一個5位元字組成。
  /<(.*)>.*<\/\1>/ "<(.*)>.*<\/\1>" 匹配一個 HTML 標籤。

  二、Regex在VBScript中的應用
  VBScript使用RegExp對象、Matches集合以及Match對象提供Regex支援功能。我們還是先看一個例子。
<%
Function RegExpTest(patrn, strng)
Dim regEx, Match, Matches   '建立變數。
Set regEx = New RegExp   '建立Regex。
regEx.Pattern = patrn  '設定模式。
regEx.IgnoreCase = True   '設定是否區分字元大小寫。
regEx.Global = True   '設定全域可用性。
Set Matches = regEx.Execute(strng)  '執行搜尋。
For Each Match in Matches  '遍曆匹配集合。
RetStr = RetStr & "Match found at position "
RetStr = RetStr & Match.FirstIndex & ". Match Value is '"
RetStr = RetStr & Match.Value & "'." & "<BR>"
Next
RegExpTest = RetStr
End Function
response.write RegExpTest("[ij]s.", "IS1 Js2 IS3 is4")
%>
在這個例子中,我們尋找字串中有無is或者js這兩個詞,忽略大小寫。啟動並執行結果如下:
Match found at position 0. Match Value is 'IS1'.
Match found at position 4. Match Value is 'Js2'.
Match found at position 8. Match Value is 'IS3'.
Match found at position 12. Match Value is 'is4'.
下面我們就介紹這三個對象和集合。
  1、RegExp對象是最重要的一個對象,它有幾個屬性,其中:
  ○Global 屬性,設定或返回一個 Boolean 值,該值指明在整個搜尋字串時模式是全部匹配還是只匹配第一個。如果搜尋應用於整個字串,Global 屬性的值為 True,否則其值為 False。預設的設定為 False。
  ○IgnoreCase 屬性,設定或返回一個Boolean值,指明模式搜尋是否區分大小寫。如果搜尋是區分大小寫,則 IgnoreCase 屬性為 False;否則為 True。預設值為 False。
  ○Pattern 屬性,設定或返回被搜尋的Regex模式。必選項。總是一個 RegExp 物件變數。
  2、Match 對象
  匹配搜尋的結果是存放在Match對象中,提供了對Regex匹配的唯讀屬性的訪問。 Match 對象只能通過 RegExp 對象的 Execute 方法來建立,該方法實際上返回了 Match 對象的集合。所有的 Match 對象屬性都是唯讀。在執行Regex時,可能產生零個或多個 Match 對象。每個 Match 對象提供了被Regex搜尋找到的字串的訪問、字串的長度,以及找到匹配的索引位置等。
  ○FirstIndex 屬性,返回在搜尋字串中匹配的位置。FirstIndex 屬性使用從零起算的位移量,該位移量是相對於搜尋字串的起始位置而言的。換言之,字串中的第一個字元被標識為字元 0
  ○Length 屬性,返回在字串搜尋中找到的匹配的長度。
  ○Value 屬性,返回在一個搜尋字串中找到的匹配的值或文本。
  3、Matches 集合
  Regex Match 對象的集合。Matches 集合中包含若干獨立的 Match 對象,只能使用 RegExp 對象的 Execute 方法來建立之。與獨立的 Match 對象屬性相同,Matches `集合的一個屬性是唯讀。在執行Regex時,可能產生零個或多個 Match 對象。每個 Match 對象都提供了與Regex匹配的字串的訪問入口、字串的長度,以及標識匹配位置的索引。
  學習了這三個對象和集合,如何應用於字串的判斷和替換呢?regExp對象的三個方法正好解決了這個問題,它們是Replace方法、Test方法和Execute方法。
  1、Replace 方法
  替換在Regex尋找中找到的文本。我們還是先看個例子:下面的例子說明了 Replace 方法的用法。
<%
Function ReplaceTest(patrn, replStr)
Dim regEx, str1 ' 建立變數。
str1 = "The quick brown fox jumped over the lazy dog."
Set regEx = New RegExp ' 建立Regex。
regEx.Pattern = patrn ' 設定模式。
regEx.IgnoreCase = True ' 設定是否區分大小寫。
ReplaceTest = regEx.Replace(str1, replStr) ' 作替換。
End Function
Response.write ReplaceTest("fox", "cat") & "<BR>" ' 將 'fox' 替換為 'cat'。
Response.write ReplaceTest("(\S+)(\s+)(\S+)", "$3$2$1") ' 交換詞對.
%>
  2、Test 方法
  對指定的字串執行一個Regex搜尋,並返回一個 Boolean 值指示是否找到匹配的模式。Regex搜尋的實際模式是通過RegExp對象的Pattern屬性來設定的。RegExp.Global屬性對Test方法沒有影響。
  如果找到了匹配的模式,Test方法返回True;否則返回False。下面的代碼說明了Test 方法的用法。
<%
Function RegExpTest(patrn, strng)
Dim regEx, retVal ' 建立變數。
Set regEx = New RegExp ' 建立Regex。
regEx.Pattern = patrn ' 設定模式。
regEx.IgnoreCase = False ' 設定是否區分大小寫。
retVal = regEx.Test(strng) ' 執行搜尋測試。
If retVal Then
RegExpTest = "找到一個或多個匹配。"
Else



相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。