正则表达式与Internet操作_第1页
正则表达式与Internet操作_第2页
正则表达式与Internet操作_第3页
正则表达式与Internet操作_第4页
正则表达式与Internet操作_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1第第7章章 正则表达式与正则表达式与Internet操作操作7.1 正则表达式正则表达式 7.2 Windows应用程序中嵌入应用程序中嵌入Web浏览器浏览器7.3 通过通过Internet搜索网络资源搜索网络资源27.1 正则表达式正则表达式 正则表达式提供了功能强大、灵活而又高效正则表达式提供了功能强大、灵活而又高效的方法来处理文本。的方法来处理文本。 正则表达式的全面模式匹配表示法使您可以正则表达式的全面模式匹配表示法使您可以快速分析大量文本以找到特定的字符模式;提取、快速分析大量文本以找到特定的字符模式;提取、编辑、替换或删除文本子字符串;或将提取的字编辑、替换或删除文本子字符串;或

2、将提取的字符串添加到集合以生成报告。符串添加到集合以生成报告。 对于处理字符串的许多应用程序而言正则表对于处理字符串的许多应用程序而言正则表达式是不可缺少的工具。达式是不可缺少的工具。3 正则表达式:正则表达式: 用某种模式去匹配指定字符串的一种表示方式。用某种模式去匹配指定字符串的一种表示方式。 正则表达式由正则表达式由普通字符普通字符和和元字符元字符组成。组成。 普通字符:常使用的字符如字母、数字、汉字普通字符:常使用的字符如字母、数字、汉字等等 元字符:可以匹配某些字符形式的具有特殊含义元字符:可以匹配某些字符形式的具有特殊含义 的字符,其作用类似于的字符,其作用类似于DOS命令使用的通

3、配符。命令使用的通配符。4正则表达式基本书写符号正则表达式基本书写符号正则表达式限定符正则表达式限定符3. 匹配字符集匹配字符集 (1) 匹配字符集是预定义的用于正则表达式中的符号集。匹配字符集是预定义的用于正则表达式中的符号集。 (2) 如果字符串与字符集中的任何一个字符相匹配,它如果字符串与字符集中的任何一个字符相匹配,它就会找到这个匹配项。就会找到这个匹配项。4. 分组构造分组构造567891011125. 正则表达式举例正则表达式举例u非负整数:非负整数:“d+$ ”u正整数:正整数: “ 0-9*1-90-9*$” u非正整数:非正整数: “ (-d+)|(0+)$” u整数:整数:

4、 “ -?d+$” u英文字符串:英文字符串: “ A-Za-z+$” u英文字符数字串:英文字符数字串: “ A-Za-z0-9+$” u英数字加下划线串:英数字加下划线串: “w+$” uE-mail地址:地址:“w-+(.w-+)*w-+(.w-+)+$” uURL:“a-zA-Z+:/(w+(-w+)*)(.(w+(-w+)*)*(?s*)?$” 13示例示例 以下是以以下是以PHP的语法所写的示例的语法所写的示例 验证字符串是否只含数字与英文,字符串长度并在验证字符串是否只含数字与英文,字符串长度并在416个字符之间个字符之间 14简易的台湾简易的台湾身份证身份证字号验证字号验证 以

5、下示例是用以下示例是用 Perl 语言写的,与上面的示例功能相同语言写的,与上面的示例功能相同 print $str = a1234 = m:a-zA-Z0-94,16$: ? COMFIRM : FAILED;print $str = a1234 = mw12d8$ ? COMFIRM : INVAILD; 15常用正则表达式常用正则表达式用户名用户名/a-z0-9_-3,16$/密码密码/a-z0-9_-6,18$/十六进制值十六进制值/#?(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 标签标签/(a-z+)(.*)|s+/)$/Unicode编码中的汉字范围编码中的汉字范围/u4e00-u9fa5,0,$/17 Regex 类表示不可变(只读)正则表达式类。它还包含各类表示不可变(只读)正则表达式类。它还包含各 种静态方法,允许在不显式创建其他类的实例的情况下使种静态方法,允许在不显式创建其他类的实例的情况下使 用其他正则表达式类。用其他正则表达式类。

7、这里仅介绍这里仅介绍IsMatch方法。方法。IsMatch方法:方法:正则表达式在输入字符串中是否找到匹配项。正则表达式在输入字符串中是否找到匹配项。 该方法有四种重载的形式:该方法有四种重载的形式:u public bool IsMatch(string str); 表示在构造函数中指定的正则表达式在表示在构造函数中指定的正则表达式在str中是否找到匹配项。中是否找到匹配项。 18upublic bool IsMatch(string str, int start); 表示在构造函数中指定的正则表达式在表示在构造函数中指定的正则表达式在str的指定起始位置开始是否的指定起始位置开始是否找到

8、匹配项。参数找到匹配项。参数start表示开始搜索的字符位置。表示开始搜索的字符位置。upublic static bool IsMatch(string str, string pattern); 表示使用表示使用pattern参数中指定的正则表达式是否在参数中指定的正则表达式是否在str中找到匹配项。中找到匹配项。upublic static bool IsMatch(string str, string pattern, RegexOptions options); 表示使用表示使用pattern参数中指定的正则表达式和参数中指定的正则表达式和options枚举提供的匹配枚举提供的匹配选

9、项在选项在input中是否找到匹配项。其中中是否找到匹配项。其中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中有匹配的项中有匹配的项, test); else Console.WriteLine(0中没有匹配的项中没有匹配的项, test); 结果结果:

10、ab无匹配项,其他均有匹配项无匹配项,其他均有匹配项20 【例【例7-1】编写一个】编写一个Windows应用程序,输入某个正应用程序,输入某个正则表达式和一个字符串,然后验证该字符串中是则表达式和一个字符串,然后验证该字符串中是否包含与正则表达式匹配的内容。否包含与正则表达式匹配的内容。 textBoxValidateStringtextBoxIsMatchReadOnly:TruetextBoxValidatedStringbuttonValidation21/单击【开始验证】按钮触发的事件单击【开始验证】按钮触发的事件private void buttonValidation_Click

11、(object sender, EventArgs e) if (r.IsMatch(textBoxValidatedString.Text) = true) textBoxIsMatch.Text = “有匹配项有匹配项; else textBoxIsMatch.Text = “没有匹配项没有匹配项; 22/ textBoxValidatedString成为活动控件时触发的事件成为活动控件时触发的事件private void textBoxValidatedString_Enter(object sender, EventArgs e) textBoxIsMatch.Clear();/ te

12、xtBoxValidateString成为活动控件时触发的事件成为活动控件时触发的事件private void textBoxValidateString_Enter(object sender, EventArgs e) textBoxIsMatch.Clear();23【例【例7-2】编写一个】编写一个Windows应用程序,利用正则应用程序,利用正则表达式验证用户注册信息是否符合要求。表达式验证用户注册信息是否符合要求。 textBoxName图7-2 例7-2的设计界面textBoxAgetextBoxPasswordlabelNamelabelAgelabelPasswordbutt

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

14、ex.IsMatch(textBoxAge.Text, d1,3$);25/更改更改textBoxPassword.Text属性值触发的事件属性值触发的事件private void textBoxPassword_TextChanged(object sender, EventArgs e) labelPassword.Visible = !Regex.IsMatch(textBoxPassword.Text, w5,$);/单击【确定】按钮触发的事件单击【确定】按钮触发的事件private void buttonOK_Click(object sender, EventArgs e) if

15、(labelName.Visible | labelAge.Visible | labelPassword.Visible) MessageBox.Show(请按要求输入请按要求输入, , MessageBoxButtons.OK, MessageBoxIcon.Hand); else MessageBox.Show(注册验证成功注册验证成功, , MessageBoxButtons.OK, MessageBoxIcon.Warning); 26 Match类表示单个正则表达式匹配操作的结果,得到的结类表示单个正则表达式匹配操作的结果,得到的结果是只读的。该类没有公共构造函数,而是用果是只读的

16、。该类没有公共构造函数,而是用Regex对象对象的的Match方法返回的结果创建该类的对象。例如:方法返回的结果创建该类的对象。例如: Regex r = new Regex(abc); Match m = r.Match(123abc456); if (m.Success) Console.WriteLine(找到匹配位置:找到匹配位置: + m.Index); Console.WriteLine(找到匹配结果:找到匹配结果: + m.Value); 运行结果:运行结果:找到匹配位置:找到匹配位置:3找到匹配结果:找到匹配结果:abc27 MatchCollection类表示成功的非重叠匹配

17、的序列,得到的集合是只类表示成功的非重叠匹配的序列,得到的集合是只读的。该类同样没有公共构造函数,而是用读的。该类同样没有公共构造函数,而是用Regex.Matches方法返回方法返回的结果创建该类的对象。例如:的结果创建该类的对象。例如: 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个匹配结果:个匹配结果:1,位置:,位置:2,i+1, resultsi, matchPositioni); 运行结果:运行结果:第第1个匹配结果:个匹配结果:abc,位置:,位置:3第第2个匹配结果:个匹配结果:abc,位置:,位置:728 Group类表示单个捕获组的结果。当与正则表达式匹配的子字符串类表示单个捕获组的结果。当与正则表达式匹配的子字符串有多组时,可以使用该类得到某一组的结果。例如:有多组时,可以使用该类得到某一组

19、的结果。例如: 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 输出结果:输出结果: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应用程序中嵌入应用程序中嵌入Web浏览器浏览器WebBrower控件控件 通过此控件可以在通过此控件可以在 Windows 窗体客户端应用程序中显示网窗体客户端应用程序中显示网页,复制应用程序中的页,复制应用程序中的 Internet Explor

22、er Web 浏览功能,浏览功能,禁用默认的禁用默认的 Internet Explorer 功能,并将该控件用作简单的功能,并将该控件用作简单的 HTML 文档查看器等。文档查看器等。327.3 通过通过Internet搜索网络资源搜索网络资源uWebClient类类 在在System.Net命名空间下的命名空间下的WebClient类提供向类提供向URI标识的标识的任何本地、任何本地、Intranet或或Internet资源发送数据以及从这些资资源发送数据以及从这些资源接收数据的公共方法。源接收数据的公共方法。 通过此类从通过此类从Web站点下载文件两种方式:站点下载文件两种方式: 1. 直接保存为本地文件直接保存为本地文件 2. 通过流进行读

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论