正則表達(dá)式與Internet操作_第1頁
正則表達(dá)式與Internet操作_第2頁
正則表達(dá)式與Internet操作_第3頁
正則表達(dá)式與Internet操作_第4頁
正則表達(dá)式與Internet操作_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、1第第7章章 正則表達(dá)式與正則表達(dá)式與Internet操作操作7.1 正則表達(dá)式正則表達(dá)式 7.2 Windows應(yīng)用程序中嵌入應(yīng)用程序中嵌入Web瀏覽器瀏覽器7.3 通過通過Internet搜索網(wǎng)絡(luò)資源搜索網(wǎng)絡(luò)資源27.1 正則表達(dá)式正則表達(dá)式 正則表達(dá)式提供了功能強(qiáng)大、靈活而又高效正則表達(dá)式提供了功能強(qiáng)大、靈活而又高效的方法來處理文本。的方法來處理文本。 正則表達(dá)式的全面模式匹配表示法使您可以正則表達(dá)式的全面模式匹配表示法使您可以快速分析大量文本以找到特定的字符模式;提取、快速分析大量文本以找到特定的字符模式;提取、編輯、替換或刪除文本子字符串;或?qū)⑻崛〉淖志庉?、替換或刪除文本子字符串;或

2、將提取的字符串添加到集合以生成報(bào)告。符串添加到集合以生成報(bào)告。 對(duì)于處理字符串的許多應(yīng)用程序而言正則表對(duì)于處理字符串的許多應(yīng)用程序而言正則表達(dá)式是不可缺少的工具。達(dá)式是不可缺少的工具。3 正則表達(dá)式:正則表達(dá)式: 用某種模式去匹配指定字符串的一種表示方式。用某種模式去匹配指定字符串的一種表示方式。 正則表達(dá)式由正則表達(dá)式由普通字符普通字符和和元字符元字符組成。組成。 普通字符:常使用的字符如字母、數(shù)字、漢字普通字符:常使用的字符如字母、數(shù)字、漢字等等 元字符:可以匹配某些字符形式的具有特殊含義元字符:可以匹配某些字符形式的具有特殊含義 的字符,其作用類似于的字符,其作用類似于DOS命令使用的通

3、配符。命令使用的通配符。4正則表達(dá)式基本書寫符號(hào)正則表達(dá)式基本書寫符號(hào)正則表達(dá)式限定符正則表達(dá)式限定符3. 匹配字符集匹配字符集 (1) 匹配字符集是預(yù)定義的用于正則表達(dá)式中的符號(hào)集。匹配字符集是預(yù)定義的用于正則表達(dá)式中的符號(hào)集。 (2) 如果字符串與字符集中的任何一個(gè)字符相匹配,它如果字符串與字符集中的任何一個(gè)字符相匹配,它就會(huì)找到這個(gè)匹配項(xiàng)。就會(huì)找到這個(gè)匹配項(xiàng)。4. 分組構(gòu)造分組構(gòu)造567891011125. 正則表達(dá)式舉例正則表達(dá)式舉例u非負(fù)整數(shù):非負(fù)整數(shù):“d+$ ”u正整數(shù):正整數(shù): “ 0-9*1-90-9*$” u非正整數(shù):非正整數(shù): “ (-d+)|(0+)$” u整數(shù):整數(shù):

4、 “ -?d+$” u英文字符串:英文字符串: “ A-Za-z+$” u英文字符數(shù)字串:英文字符數(shù)字串: “ A-Za-z0-9+$” u英數(shù)字加下劃線串:英數(shù)字加下劃線串: “w+$” uE-mail地址:地址:“w-+(.w-+)*w-+(.w-+)+$” uURL:“a-zA-Z+:/(w+(-w+)*)(.(w+(-w+)*)*(?s*)?$” 13示例示例 以下是以以下是以PHP的語法所寫的示例的語法所寫的示例 驗(yàn)證字符串是否只含數(shù)字與英文,字符串長(zhǎng)度并在驗(yàn)證字符串是否只含數(shù)字與英文,字符串長(zhǎng)度并在416個(gè)字符之間個(gè)字符之間 14簡(jiǎn)易的臺(tái)灣簡(jiǎn)易的臺(tái)灣身份證身份證字號(hào)驗(yàn)證字號(hào)驗(yàn)證 以

5、下示例是用以下示例是用 Perl 語言寫的,與上面的示例功能相同語言寫的,與上面的示例功能相同 print $str = a1234 = m:a-zA-Z0-94,16$: ? COMFIRM : FAILED;print $str = a1234 = mw12d8$ ? COMFIRM : INVAILD; 15常用正則表達(dá)式常用正則表達(dá)式用戶名用戶名/a-z0-9_-3,16$/密碼密碼/a-z0-9_-6,18$/十六進(jìn)制值十六進(jìn)制值/#?(a-f0-96|a-f0-93)$/電子郵箱電子郵箱/(a-z0-9_.-+)(da-z.-+).(a-z.2,6)$/URL/(https?:/)

6、?(da-z.-+).(a-z.2,6)(/w .-*)*/?$/IP 地址地址/(?:(?:250-5|20-40-9|01?0-90-9?).)3(?:250-5|20-40-9|01?0-90-9?)$/16HTML 標(biāo)簽標(biāo)簽/(a-z+)(.*)|s+/)$/Unicode編碼中的漢字范圍編碼中的漢字范圍/u4e00-u9fa5,0,$/17 Regex 類表示不可變(只讀)正則表達(dá)式類。它還包含各類表示不可變(只讀)正則表達(dá)式類。它還包含各 種靜態(tài)方法,允許在不顯式創(chuàng)建其他類的實(shí)例的情況下使種靜態(tài)方法,允許在不顯式創(chuàng)建其他類的實(shí)例的情況下使 用其他正則表達(dá)式類。用其他正則表達(dá)式類。

7、這里僅介紹這里僅介紹IsMatch方法。方法。IsMatch方法:方法:正則表達(dá)式在輸入字符串中是否找到匹配項(xiàng)。正則表達(dá)式在輸入字符串中是否找到匹配項(xiàng)。 該方法有四種重載的形式:該方法有四種重載的形式:u public bool IsMatch(string str); 表示在構(gòu)造函數(shù)中指定的正則表達(dá)式在表示在構(gòu)造函數(shù)中指定的正則表達(dá)式在str中是否找到匹配項(xiàng)。中是否找到匹配項(xiàng)。 18upublic bool IsMatch(string str, int start); 表示在構(gòu)造函數(shù)中指定的正則表達(dá)式在表示在構(gòu)造函數(shù)中指定的正則表達(dá)式在str的指定起始位置開始是否的指定起始位置開始是否找到

8、匹配項(xiàng)。參數(shù)找到匹配項(xiàng)。參數(shù)start表示開始搜索的字符位置。表示開始搜索的字符位置。upublic static bool IsMatch(string str, string pattern); 表示使用表示使用pattern參數(shù)中指定的正則表達(dá)式是否在參數(shù)中指定的正則表達(dá)式是否在str中找到匹配項(xiàng)。中找到匹配項(xiàng)。upublic static bool IsMatch(string str, string pattern, RegexOptions options); 表示使用表示使用pattern參數(shù)中指定的正則表達(dá)式和參數(shù)中指定的正則表達(dá)式和options枚舉提供的匹配枚舉提供的匹配選

9、項(xiàng)在選項(xiàng)在input中是否找到匹配項(xiàng)。其中中是否找到匹配項(xiàng)。其中options是是RegexOption枚舉值枚舉值的按位的按位“或或”組合。組合。19例例: Regex r = new Regex(0-9a-z3,5); string tests = abc, 123456, (aa22bb33), ab; foreach (string test in tests) if (r.IsMatch(test) Console.WriteLine(0中有匹配的項(xiàng)中有匹配的項(xiàng), test); else Console.WriteLine(0中沒有匹配的項(xiàng)中沒有匹配的項(xiàng), test); 結(jié)果結(jié)果:

10、ab無匹配項(xiàng),其他均有匹配項(xiàng)無匹配項(xiàng),其他均有匹配項(xiàng)20 【例【例7-1】編寫一個(gè)】編寫一個(gè)Windows應(yīng)用程序,輸入某個(gè)正應(yīng)用程序,輸入某個(gè)正則表達(dá)式和一個(gè)字符串,然后驗(yàn)證該字符串中是則表達(dá)式和一個(gè)字符串,然后驗(yàn)證該字符串中是否包含與正則表達(dá)式匹配的內(nèi)容。否包含與正則表達(dá)式匹配的內(nèi)容。 textBoxValidateStringtextBoxIsMatchReadOnly:TruetextBoxValidatedStringbuttonValidation21/單擊【開始驗(yàn)證】按鈕觸發(fā)的事件單擊【開始驗(yàn)證】按鈕觸發(fā)的事件private void buttonValidation_Click

11、(object sender, EventArgs e) if (r.IsMatch(textBoxValidatedString.Text) = true) textBoxIsMatch.Text = “有匹配項(xiàng)有匹配項(xiàng); else textBoxIsMatch.Text = “沒有匹配項(xiàng)沒有匹配項(xiàng); 22/ textBoxValidatedString成為活動(dòng)控件時(shí)觸發(fā)的事件成為活動(dòng)控件時(shí)觸發(fā)的事件private void textBoxValidatedString_Enter(object sender, EventArgs e) textBoxIsMatch.Clear();/ te

12、xtBoxValidateString成為活動(dòng)控件時(shí)觸發(fā)的事件成為活動(dòng)控件時(shí)觸發(fā)的事件private void textBoxValidateString_Enter(object sender, EventArgs e) textBoxIsMatch.Clear();23【例【例7-2】編寫一個(gè)】編寫一個(gè)Windows應(yīng)用程序,利用正則應(yīng)用程序,利用正則表達(dá)式驗(yàn)證用戶注冊(cè)信息是否符合要求。表達(dá)式驗(yàn)證用戶注冊(cè)信息是否符合要求。 textBoxName圖7-2 例7-2的設(shè)計(jì)界面textBoxAgetextBoxPasswordlabelNamelabelAgelabelPasswordbutt

13、onOK24/更改更改textBoxName.Text屬性值觸發(fā)的事件屬性值觸發(fā)的事件private void textBoxName_TextChanged(object sender, EventArgs e) labelName.Visible = !Regex.IsMatch(textBoxName.Text, u4e00-u9fa52,$);/更改更改textBoxAge.Text屬性值觸發(fā)的事件屬性值觸發(fā)的事件private void textBoxAge_TextChanged(object sender, EventArgs e) labelAge.Visible = !Reg

14、ex.IsMatch(textBoxAge.Text, d1,3$);25/更改更改textBoxPassword.Text屬性值觸發(fā)的事件屬性值觸發(fā)的事件private void textBoxPassword_TextChanged(object sender, EventArgs e) labelPassword.Visible = !Regex.IsMatch(textBoxPassword.Text, w5,$);/單擊【確定】按鈕觸發(fā)的事件單擊【確定】按鈕觸發(fā)的事件private void buttonOK_Click(object sender, EventArgs e) if

15、(labelName.Visible | labelAge.Visible | labelPassword.Visible) MessageBox.Show(請(qǐng)按要求輸入請(qǐng)按要求輸入, , MessageBoxButtons.OK, MessageBoxIcon.Hand); else MessageBox.Show(注冊(cè)驗(yàn)證成功注冊(cè)驗(yàn)證成功, , MessageBoxButtons.OK, MessageBoxIcon.Warning); 26 Match類表示單個(gè)正則表達(dá)式匹配操作的結(jié)果,得到的結(jié)類表示單個(gè)正則表達(dá)式匹配操作的結(jié)果,得到的結(jié)果是只讀的。該類沒有公共構(gòu)造函數(shù),而是用果是只讀的

16、。該類沒有公共構(gòu)造函數(shù),而是用Regex對(duì)象對(duì)象的的Match方法返回的結(jié)果創(chuàng)建該類的對(duì)象。例如:方法返回的結(jié)果創(chuàng)建該類的對(duì)象。例如: Regex r = new Regex(abc); Match m = r.Match(123abc456); if (m.Success) Console.WriteLine(找到匹配位置:找到匹配位置: + m.Index); Console.WriteLine(找到匹配結(jié)果:找到匹配結(jié)果: + m.Value); 運(yùn)行結(jié)果:運(yùn)行結(jié)果:找到匹配位置:找到匹配位置:3找到匹配結(jié)果:找到匹配結(jié)果:abc27 MatchCollection類表示成功的非重疊匹配

17、的序列,得到的集合是只類表示成功的非重疊匹配的序列,得到的集合是只讀的。該類同樣沒有公共構(gòu)造函數(shù),而是用讀的。該類同樣沒有公共構(gòu)造函數(shù),而是用Regex.Matches方法返回方法返回的結(jié)果創(chuàng)建該類的對(duì)象。例如:的結(jié)果創(chuàng)建該類的對(duì)象。例如: Regex r = new Regex(abc); MatchCollection mc = r.Matches(123abc4abcd); int count = mc.Count; String results = new Stringcount; int matchPosition = new intcount; for (int i = 0; i

18、count; i+) resultsi = mci.Value; matchPositioni = mci.Index; Console.WriteLine(第第0個(gè)匹配結(jié)果:個(gè)匹配結(jié)果:1,位置:,位置:2,i+1, resultsi, matchPositioni); 運(yùn)行結(jié)果:運(yùn)行結(jié)果:第第1個(gè)匹配結(jié)果:個(gè)匹配結(jié)果:abc,位置:,位置:3第第2個(gè)匹配結(jié)果:個(gè)匹配結(jié)果:abc,位置:,位置:728 Group類表示單個(gè)捕獲組的結(jié)果。當(dāng)與正則表達(dá)式匹配的子字符串類表示單個(gè)捕獲組的結(jié)果。當(dāng)與正則表達(dá)式匹配的子字符串有多組時(shí),可以使用該類得到某一組的結(jié)果。例如:有多組時(shí),可以使用該類得到某一組

19、的結(jié)果。例如: string text = One car red car blue car; string pat = (w+)s+(car); Regex r = new Regex(pat, RegexOptions.IgnoreCase); Match m = r.Match(text); int matchCount = 0; while (m.Success) Console.WriteLine(Match + (+matchCount); for (int i = 1; i = 2; i+) Group g = m.Groupsi; Console.WriteLine(strin

20、g.Format(Group0=1, i, g); CaptureCollection cc = g.Captures;29 for (int j = 0; j cc.Count; j+) Capture c = ccj; Console.WriteLine(string.Format( Capture0=1, Position=2, j, c, c.Index); m = m.NextMatch(); Console.ReadLine();30 輸出結(jié)果:輸出結(jié)果:Match1Group1=OneCapture0=One, Position=0Group2=carCapture0=car,

21、Position=4Match2Group1=redCapture0=red, Position=8Group2=carCapture0=car, Position=12Match3Group1=blueCapture0=blue, Position=16Group2=carCapture0=car, Position=21317.2 Windows應(yīng)用程序中嵌入應(yīng)用程序中嵌入Web瀏覽器瀏覽器WebBrower控件控件 通過此控件可以在通過此控件可以在 Windows 窗體客戶端應(yīng)用程序中顯示網(wǎng)窗體客戶端應(yīng)用程序中顯示網(wǎng)頁,復(fù)制應(yīng)用程序中的頁,復(fù)制應(yīng)用程序中的 Internet Explor

22、er Web 瀏覽功能,瀏覽功能,禁用默認(rèn)的禁用默認(rèn)的 Internet Explorer 功能,并將該控件用作簡(jiǎn)單的功能,并將該控件用作簡(jiǎn)單的 HTML 文檔查看器等。文檔查看器等。327.3 通過通過Internet搜索網(wǎng)絡(luò)資源搜索網(wǎng)絡(luò)資源uWebClient類類 在在System.Net命名空間下的命名空間下的WebClient類提供向類提供向URI標(biāo)識(shí)的標(biāo)識(shí)的任何本地、任何本地、Intranet或或Internet資源發(fā)送數(shù)據(jù)以及從這些資資源發(fā)送數(shù)據(jù)以及從這些資源接收數(shù)據(jù)的公共方法。源接收數(shù)據(jù)的公共方法。 通過此類從通過此類從Web站點(diǎn)下載文件兩種方式:站點(diǎn)下載文件兩種方式: 1. 直接保存為本地文件直接保存為本地文件 2. 通過流進(jìn)行讀

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論