麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Regex > 正文

如何應用正則表達式

2024-09-07 17:40:08
字體:
來源:轉載
供稿:網友

相信大家都在錯新技術頻道上學會了很多編程知識,本文在這里介紹了如何應用正則表達式的內容,小編在這里提醒大家使用正則表達式之前一定要有正則表達式的基礎哦。

一、正則表達式概述
  二、正則表達式在VBScript中的應用
  三、正則表達式在VavaScript中的應用
  四、示例
  五、總結

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

  二、正則表達式在VBScript中的應用
  VBScript使用RegExp對象、Matches集合以及Match對象提供正則表達式支持功能。我們還是先看一個例子。
<%
Function?RegExpTest(patrn,?strng)
Dim?regEx,?Match,?Matches?  '建立變量。
Set?regEx?=?New?RegExp?  '建立正則表達式。
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?屬性,設置或返回被搜索的正則表達式模式。必選項。總是一個?RegExp?對象變量。
  2、Match?對象
  匹配搜索的結果是存放在Match對象中,提供了對正則表達式匹配的只讀屬性的訪問。?Match?對象只能通過?RegExp?對象的?Execute?方法來創建,該方法實際上返回了?Match?對象的集合。所有的?Match?對象屬性都是只讀的。在執行正則表達式時,可能產生零個或多個?Match?對象。每個?Match?對象提供了被正則表達式搜索找到的字符串的訪問、字符串的長度,以及找到匹配的索引位置等。
  ○FirstIndex?屬性,返回在搜索字符串中匹配的位置。FirstIndex?屬性使用從零起算的偏移量,該偏移量是相對于搜索字符串的起始位置而言的。換言之,字符串中的第一個字符被標識為字符?0
  ○Length?屬性,返回在字符串搜索中找到的匹配的長度。
  ○value?屬性,返回在一個搜索字符串中找到的匹配的值或文本。
  3、Matches?集合
  正則表達式?Match?對象的集合。Matches?集合中包含若干獨立的?Match?對象,只能使用?RegExp?對象的?Execute?方法來創建之。與獨立的?Match?對象屬性相同,Matches?`集合的一個屬性是只讀的。在執行正則表達式時,可能產生零個或多個?Match?對象。每個?Match?對象都提供了與正則表達式匹配的字符串的訪問入口、字符串的長度,以及標識匹配位置的索引。
  學習了這三個對象和集合,如何應用于字符串的判斷和替換呢?regExp對象的三個方法正好解決了這個問題,它們是Replace方法、Test方法和Execute方法。
  1、Replace?方法
  替換在正則表達式查找中找到的文本。我們還是先看個例子:下面的例子說明了?Replace?方法的用法。
<%
Function?ReplaceTest(patrn,?replStr)
Dim?regEx,?str1'?建立變量。
str1?=?"The?quick?brown?fox?jumped?over?the?lazy?dog."
Set?regEx?=?New?RegExp'?建立正則表達式。
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?方法
  對指定的字符串執行一個正則表達式搜索,并返回一個?Boolean?值指示是否找到匹配的模式。正則表達式搜索的實際模式是通過RegExp對象的Pattern屬性來設置的。RegExp.Global屬性對Test方法沒有影響。
  如果找到了匹配的模式,Test方法返回True;否則返回False。下面的代碼說明了Test?方法的用法。
<%
Function?RegExpTest(patrn,?strng)
Dim?regEx,?retVal?'?建立變量。
Set?regEx?=?New?RegExp?'?建立正則表達式。
regEx.Pattern?=?patrn?'?設置模式。
regEx.IgnoreCase?=?False?'?設置是否區分大小寫。
retVal?=?regEx.Test(strng)?'?執行搜索測試。
If?retVal?Then
RegExpTest?=?"找到一個或多個匹配。"
Else
RegExpTest?=?"未找到匹配。"
End?If
End?Function
Response.write?RegExpTest("is.",?"IS1?is2?IS3?is4")
%>
  3、Execute?方法
  對指定的字符串執行正則表達式搜索。正則表達式搜索的設計模式是通過?RegExp?對象的?Pattern?來設置的。
  Execute?方法返回一個?Matches?集合,其中包含了在?string?中找到的每一個匹配的?Match?對象。如果未找到匹配,Execute?將返回空的?Matches?集合。

  三、javascript中正則表達式的使用
  在javascript?1.2版以后,javascript也支持正則表達式。
  1、replace?
  replace在一個字符串中通過正則表達式查找替換相應的內容。replace并不改變原來的字符串,只是重新生成了一個新的字符串。如果需要執行全局查找或忽略大小寫,那么在正則表達式的最后添加g和i。
例:
<SCRIPT>
re?=?/apples/gi;
str?=?"Apples?are?round,?and?apples?are?juicy.";
newstr=str.replace(re,?"oranges");
document.write(newstr)
</SCRIPT>
結果是:"oranges?are?round,?and?oranges?are?juicy."?
例:
<SCRIPT>
str?=?"Twas?the?night?before?Xmas...";
newstr=str.replace(/xmas/i,?"Christmas");
document.write(newstr)
</SCRIPT>
結果是:"Twas?the?night?before?Christmas..."?
例:
<SCRIPT>
re?=?/(/w+)/s(/w+)/;str?=?"John?Smith";
newstr?=?str.replace(re,?"$2,?$1");
document.write(newstr)
</SCRIPT>
結果是:"Smith,?John".?
  2、search?
search通過正則表達式查找相應的字符串,只是判斷有無匹配的字符串。如果查找成功,search返回匹配串的位置,否則返回-1。?
         search(regexp)
<SCRIPT>
function?testinput(re,?str){
?if?(str.search(re)?!=?-1)
midstring?=?"?contains?";
?else
?midstring?=?"?does?not?contain?";
?document.write?(str?+?midstring?+?re.source);
}
testinput(/^[1-9]/i,"123")
</SCRIPT>
  3、match?
  match方法執行全局查找,查找結果存放在一個數組里。
例一:?
<SCRIPT>?
str?=?"For?more?information,?see?Chapter?3.4.5.1";
re?=?/(chapter?/d+(/./d)*)/i;?
found?=?str.match(re);?
document.write(found);?
</SCRIPT>
顯示結果:Chapter?3.4.5.1,Chapter?3.4.5.1,.1?
例二:
<SCRIPT>
str?=?"abcDdcba";?
newArray?=?str.match(/d/gi);
document.write(newArray);?
</SCRIPT>
顯示結果D,?d.

  四、示例
1?、判斷數字的正確性
<%@?Language=VBScript?%>
<script?language="javascript"?runat="server">
?function?isNumeric(strNumber)?{
return?(strNumber.search(/^(-|/+)?/d+(/./d+)?$/)?!=?-1);
?}
?function?isUnsignedNumeric(strNumber)?{
return?(strNumber.search(/^/d+(/./d+)?$/)?!=?-1);
?}
?function?isInteger(strInteger)?{
return?(strInteger.search(/^(-|/+)?/d+$/)?!=?-1);
?}
?function?isUnsignedInteger(strInteger)?{
return?(strInteger.search(/^/d+$/)?!=?-1);
?}
</script>
<HTML>
?<BODY>
<b>判斷數字的正確性</b>
<%
Dim?strTemp
strTemp?=?CStr(Request.Form("inputstring"))
If?strTemp?=?""?Then?strTemp?=?"0"
%>
<TABLE?BORDER="1"?CELLPADDING="4"?CELLSPACING="2">
?<TR>
<TD?ALIGN="right"><B>原始字符串</B></TD>
<TD><%=?strTemp?%></TD>
?</TR>
?<TR>
<TD?ALIGN="right"><B>數字</B></TD>
<TD><%=isNumeric(strTemp)%></TD>
?</TR>
?<TR>
<TD?ALIGN="right"><B>非負數字</B></TD>
<TD><%=isUnsignedNumeric(strTemp)%></TD>
?</TR>
?<TR>
<TD?ALIGN="right"><B>整數</B></TD>
<TD><%=isInteger(strTemp)%></TD>
?</TR>
?<TR>
<TD?ALIGN="right"><B>非負整數()</B></TD>
<TD><%=isUnsignedInteger(strTemp)%></TD>
?</TR>
</TABLE>
<FORM?ACTION="<%=Request.ServerVariables("SCRIPT_NAME")%>"?METHOD="post">
?請輸入一個數字:<BR>
?<INPUT?TYPE="text"?NAME="inputstring"?SIZE="50"></INPUT><BR>
?<INPUT?TYPE="submit"?value="提交"></INPUT><BR>
</FORM>
</BODY>
</HTML>
2、判斷Email地址的正確性
<%
Function?isemail(strng)
?isemail?=?false
?Dim?regEx,?Match
?Set?regEx?=?New?RegExp
?regEx.Pattern?=?"^/w+((-/w+)|(/./w+))*/@[A-Za-z0-9]+((/.|-)[A-Za-z0-9]+)*/.[A-Za-z0-9]+$"
?regEx.IgnoreCase?=?True
?Set?Match?=?regEx.Execute(strng)
if?match.count?then?isemail=?true
End?Function
%>
上面我們介紹了如何應用正則表達式的內容,我們可以通過一些實例讓大家認識正則表達式的應用范圍很廣,能為大家解決很多實際中的問題。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 一级在线视频 | 青青国产在线视频 | 日韩激情 | 污黄视频在线观看 | 日本人乱人乱亲乱色视频观看 | 国产二区三区视频 | 欧美日韩国产成人在线观看 | 国产免费观看a大片的网站 欧美成人一级 | 成人在线影视 | 欧美三级日本三级少妇99 | 亚洲精品一区二区三区在线看 | 黄色毛片视频在线观看 | 免费中文视频 | 99这里精品 | 免费黄色欧美视频 | 久久精品1区2区 | 国产精品爱久久久久久久 | av免费在线观看国产 | 一级电影免费在线观看 | 成人精品久久 | 国产一区二区三区四区五区在线 | 亚洲国产精品一 | 国产午夜精品一区二区三区不卡 | 成人午夜在线免费观看 | 国产亚洲精品久久久久久网站 | 国产精品午夜性视频 | www.理论片| 高清国产午夜精品久久久久久 | 久久久精品视频网站 | 性大片1000免费看 | 调教小男生抽打尿孔嗯啊视频 | 久草在线公开视频 | 欧美三级一级 | 久久国产秒 | 激情宗合网 | 九九久久视频 | 亚洲影院在线播放 | 免费观看视频在线 | 成人午夜免费福利 | 成人免费一区二区三区视频网站 | 欧美黄在线 |