您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 统计图表 > 第10章C2008注册表编制与正则表达式
第10章注册表编程与正则表达式•出于方便的考虑,开发人员经常把大型的程序分为若干个相互联系的可执行程序和动态链接库(Dynamic-LinkLibrary,简写为DLL)。这样就会发现,在同一个应用程序中,各种语言编写的组件和DLL的相互调用是一件非常困难的事,但是对于VisualStudio2008却是一件非常简单的事。•Windows操作系统的注册表中包含了有关计算机运行方式的配置信息,在应用程序中经常需要利用注册表来登记应用程序的名称、运行路径及用户应用程序的配置信息等。因此C#2008对注册表提供了全方位的支持。•著名的awk工具包在很早就提供了正则表达式这方面的支持,其应用十分广泛,提供的功能强大、灵活而又高效。C#2008对正则表达式提供了良好的支持。10.1COM组件和.NET组件互相操作•COM组件和.NET组件分别依赖于不同的内部结构,所以两者是不兼容的。微软公司在.NETSDK中提供了一些工具,可以为COM组件生成.NET代理,也可以为.NET组件生成COM组件代理。即各个公司可以在.NET工程中使用旧的COM组件,并且也可以在非.NET应用程序中使用.NET组件。10.1.1COM组件和.NET组件基本概念•在学习COM组件和.NET组件时,首先要了解它们产生的历史、运行条件、使用环境等。•1.COM组件基本知识•2..NET组件基本知识•3.COM与.NET的选择使用问题10.1.2在.NET中使用COM组件•【本节示例参考:\示例代码\Chap10\AddNewCustomer】•COM组件的互操作性使用“包装(wrapper)”的类和“代理”组件,包装的类把依附于另一个体系结构的类包围起来,从而为不能识别被包装类原有接口的客户提供了一个本机接口。同样地,客户可以使用代理组件去访问依附于不同体系结构的组件或在外地的组件,访问机制如图所示。10.1.3在COM中使用.NET组件•正如可以在.NET代码中使用COM组件一样,也可以在标准的Windows代码中使用.NET组件,只有为数不多的.NET装配件的特征不能通过COM访问。•在COM代码中使用.NET组件时要用到另一个与.NETSDK一起安装的实用程序,这个实用程序的名称为RegAsm.exe。该组建的全称为RegisterAssembly,负责把.NET组件的类型信息输入到系统注册表中,以便COMServices可以访问.NET组件。只有被注册后的.NET组件,COM组件才能访问。•当编写了一个函数后,就可以编译成.NET装配件。接着就可以通过RegAsm.exe注册带有COMServices的装配件。由于装配件已经通过RegAsm使用COMServices而被注册过,因此就可以自由地通过COMServices对.NET装配件进行后期的绑定。10.2注册表操作•自从Windows95以后的操作系统都包含了注册表,这些注册表不仅包含了Windows安装、用户喜好以及已安装软件和设备的所有配置信息的核心存储库,还包含了安全性和网络管理等配置信息。10.2.1注册表概述•注册表的层次结构非常类似于文件系统,查看和修改注册表内容的一般方式是使用“regedit”。在Windows95系统中,提供了用于用户编辑注册表的工具regedit,该工具具有对注册表进行操作的强大功能。而在WindowNT和Windows2000操作系统中,相应的工具为regedt32。在“开始”菜单中选择“运行”,键入regedit,将打开注册表编辑器,界面如图所示。10.2.2C#2008对注册表编程的支持•在C#2008中,为了支持注册表编程,出现了两个类Registry和RegistryKey。这两个类都是密封类,即都是不允许被其他类继承。•如果要浏览子键、创建新键、读取或修改键中的值,就要用RegistryKey类,其封装了对注册表的所有操作。如果要创建RegistryKey类的实例,以便开始对注册表的操作,这就要用到Registry类,在该类中有7个公有的静态域,分别代表Windows注册表中的7个基本主键,如表所示。10.2.3修改注册表•【本节示例参考:\示例代码\Chap10\RevisionRegistry】•下面例子示例了如何修改“开始”菜单,Windows注册表中对于桌面的设置,大都放在HKEY_USERS和HKEY_CURRENT_USER中。“开始”菜单中的“运行”菜单和“查找”菜单,“设置”菜单中的“控制面板”和“打印机”,都可以通过在“HKEY_CURRENT_USER\\Soft\\Windows\\CurrentVersion\\Policies\\Explore”主键下新建DWORD键值来屏蔽,各键值如表所示。10.3正则表达式•正则表达式是定义了一个可用来匹配字符串模式的字符序列。字符序列可以包括转义字符、其他特殊字符和用于精确查找的字符序列。正则表达式的全面模式匹配表示法使快速分析大量文本以找到特定的字符模式成为可能。还可以用于提取、编辑、替换、删除文本字符串或将提取的字符串添加到集合以生成报告。10.3.1正则表达式概述•当前所有的文本编辑器都有一些搜素功能。通常可以打开一个对话框,在其中的一个文本框中键入要定位的字符串,如果还要同时进行替换操作,可以键入一个替换字符串。如图所示。10.3.2正则表达式类简单介绍•C#2008中提供了System.Text.RegularExpressions命令空间,这个命令空间下包含一些类,这些类提供对.NETFramework正则表达式引擎的访问。本节要讨论的类的层次结构如图所示。10.3.3Regex类实现字符代替•【本节示例参考:\示例代码\Chap10\ReplacesCharacter】•下面的代码示例了Regex类的简单用法:•//声明一个Regex变量•Regexr;•//初始化,并用正则表达式初始化•r=newRegex(“[a,e,i,o,u]”);•Regex类有三种构造函数,它们的基本格式如下:•ProtectedRegex();•PublicRegex(stringpattern);•PublicRegex(stringpattern,RegexOptionoptions);10.3.4Match类实现查找•【本节示例参考:\示例代码\TestMatch】•Match类的常用方法如表所示。10.3.5MatchCollection类实现查找•【本节示例参考:\示例代码\TestMatchCollectionction】•MatchCollection类的常用方法如表所示。10.3.6GroupCollection类输出查找元素的数目•【本节示例参考:\示例代码\TestGroupCollection】•GroupCollection类的常用方法如表所示。10.3.7CaptureCollection类实现字符的匹配•【本节示例参考:\示例代码\TestCaptureCollection】•CaptureCollection类的常用方法如下表所示。10.3.8Group类定位查找元素的位置•【本节示例参考:\示例代码\Position】•该类有一个公有静态方法,基本格式为:•PublicstaticGroupSynchronized(Groupinner)•在上述定义的格式中,用一个线程安全的包装指定的Group并返回对被包装Group的引用。代码使用嵌套的分组结构来将子字符串捕获到组中。10.3.9Capture类应用实现字符的定位•【本节示例参考:\示例代码\Localization】•该类有一个公有实例方法,基本定义格式如下:•PublicoverridestringToString()•在上述定义中,返回被捕捉的子串。代码在Group集合中循环,从Group的每一成员中提取Capture集合,并且将变量myPositionmyLength分配给找到每一个字符串的初始字符串中的字符位置,以及每一字符串的长度。10.3.10常用正则表达式•下面给出一些常用的正则表达式,供读者学习和在程序中使用。•[\u4e00-\u9fa5]:匹配中文字符的正则表达式。•[^\x00-\xff]:匹配双字节字符(包括汉字在内)。•\n[\s|]*\r:匹配空行的正则表达式。•/(.*).*V\1|(.*)V/:匹配HTML的正则表达式。•(^\s*)|(\a*$):匹配首尾空格的正则表达式。•\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*:匹配E-mail地址的正则表达式。•http://(\w-)+[\w-]+(/[\w-./?%&=]*)?:匹配http网址的正则表达式。10.4小结•本章主要讲解了在实际编程中会用到的一些技术:组件的互操作性、注册表操作和正则表达式。•组件的互操作性可以使程序方便的引入外部程序,C#2008语言对于注册表,可以创建、修改和读取键。正则表达式的目得就是处理复杂的文本匹配的替换等问题。其的出现的确减轻文本处理方面编程的负担,因此读者一定要掌握这些技术。
本文标题:第10章C2008注册表编制与正则表达式
链接地址:https://www.777doc.com/doc-2152906 .html