网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > ASP.NET技巧
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.ASP.NET图象处理详解(2).
..NET反射的简单示例.
.在 IIS 中配置 SQL XML 支持.
.用ASP.NET 2.0在Oracle中存取图片.
.页面根据不同Url显示不同Title以.
.ASP.NET中17种正则表达式.
.Asp.net1.1升级到2.0遇到的一些问.
.解析Asp.net中资源本地化的实现.
.ASP 2.0 数据绑定函数Eval()的机.
.第一次用.net2.0 LOGIN登陆控件的.
.DataTable操作中的性能问题.
.让ASP.NET简便使用SCRIPT.
.用asp.net还原与恢复sqlserver数.
.ASP.NET基本编程习惯.
.asp.net创建文件夹的IO类的问题.
.ASP.NET Atlas对JavaScript的扩展.
.asp.net如何连接sql server2000数.
..Net开发漫谈:关于命名空间和目.
.ASP.NET2.0:Ilungasoft.Framewor.
.设置上传文件的最大大小.

.NET正则表达式使用高级技巧之组的概念

发表日期:2006-3-22


  正则表达式中的组是很重要的一个概念,它是我们通向高级正则应用的的桥梁。

  组的概念

  一个正则表达式匹配结果可以分成多个部分,这就是组(Group)的目的。能够灵活的使用组后,你会发现Regex真是很方便,也很强大。

  先举个例子

public static void Main()
{
 string s = "2005-2-21";
 Regex reg = new Regex(@"(?<y>\d{4})-(?<m>\d{1,2})-(?<d>\d{1,2})",RegexOptions.Compiled);
 Match match = reg.Match(s);
 int year = int.Parse(match.Groups["y"].Value);
 int month = int.Parse(match.Groups["m"].Value);
 int day = int .Parse(match.Groups["d"].Value);
 DateTime time = new DateTime(year,month,day);
 Console.WriteLine(time);
 Console.ReadLine();

  以上的例子通过组来实现分析一个字符串,并把其转化为一个DateTime实例,当然,这个功能用DateTime.Parse方法就能很方便的实现。

  在这个例子中,我把一次Match结果用(?<name>)的方式分成三个组"y","m","d"分别代表年、月、日。

  现在我们已经有了组的概念了,再来看如何分组,很简单的,除了上在的办法,我们可以用一对括号就定义出一个组,比如上例可以改成:

public static void Main()
{
 string s = "2005-2-21";
 Regex reg = new Regex(@"(\d{4})-(\d{1,2})-(\d{1,2})",RegexOptions.Compiled);
 Match match = reg.Match(s);
 int year = int.Parse(match.Groups[1].Value);
 int month = int.Parse(match.Groups[2].Value);
 int day = int .Parse(match.Groups[3].Value);
 DateTime time = new DateTime(year,month,day);
 Console.WriteLine(time);
 Console.ReadLine();
}

  从上例可以看出,第一个括号对包涵的组被自动编号为1,后面的括号依次编号为2、3……

public static void Main()
{
 string s = "2005-2-21";
 Regex reg = new Regex(@"(?<2>\d{4})-(?<1>\d{1,2})-(?<3>\d{1,2})",RegexOptions.Compiled);
 Match match = reg.Match(s);
 int year = int.Parse(match.Groups[2].Value);
 int month = int.Parse(match.Groups[1].Value);
 int day = int .Parse(match.Groups[3].Value);
 DateTime time = new DateTime(year,month,day);
 Console.WriteLine(time);
 Console.ReadLine();

  再看上例,我们用(?<数字>)的方式手工给每个括号对的组编号,(注意我定义1和2的位置时不是从左到右定义的)

  通过以上三例,我们知道了给Regex定义Group的三种办法以及相应的引用组匹配结果的方式。

  然后,关于组定义,还有两点请注意:

  1、因为括号用于定义组了,所以如果要匹配"("和")",请使用"\("和"\)"(关于所有特殊字符的定义,请查看相关Regex expression帮助文档)。

  2、如果定义Regex时,使用了ExplicitCapture选项,则第二个例子不会成功,因为此选项要求显式定义了编号或名字的组才捕获并保存结果,如果你没有定义ExplicitCapture选项,而有时又定义了类式于(A|B)这样的部分在表达式,而这个(A|B)你又并不想捕获结果,那么可以使用“不捕获的组”语法,即定义成(?:)的方式,针对于(A|B),你可以这样来定义以达到不捕获并保存它到Group集合中的目的--(?:A|B)。

上一篇:Asp.net前后台值的调用 人气:5730
下一篇:.NET下正则表达式应用的四个示例 人气:6766
浏览全部.NET的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐