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

概念|高级|技巧|正则

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

  组的概念

  一个正则表达式匹配结果可以分成多个部分,这就是组(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)。

时间: 2024-08-03 20:32:44

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

Java正则表达式中的捕获组的概念及相关API使用

要弄清这三个方法,首先要弄清Java正则表达式中的捕获组的概念.捕获组也就是Pattern中以括号对"()"分割出的子Pattern.至于为什么要用捕获组呢,主要是为了能找出在一次匹配中你更关心的部分.捕获组可以通过从左到右计算其开括号来编号.例如,在表达式 "(x)(y\\w*)(z)" 中,存在三个这样的组:  1.  x2.  y\\w*3.  z组零始终代表整个表达式.之所以这样命名捕获组是因为在匹配中,保存了与这些组匹配的输入序列的每个子序列.捕获的子序列

.net中的正则表达式使用高级技巧

一.前言 一.本系列文章不讲述基本的正则语法,这些可以在微软的JS帮助文档中找到,也可以Google一下二.写系列文章的原因 1.正则很有用,而且经常要用 2.正则的一些高级用法有相当一部分人还没有理解和掌握 3.刚好又在网上看到了一篇文章错误的使用了正则式,使我有了写本文的冲动 4.本系列文章的大部分知识可同时适用于.net语言,JavaScript等三.本系列文章特点:尽量使用小例子来说明相对难懂而很多正则书籍都没有说清的正则语法 四.本系列文章内容:替换的高级语法,内联表达式选项,组,反向

正则表达式高级技巧背后的关键概念[SM]

正则表达式(Regular Expression, abbr. regex) 功能强大,能够用于在一大串字符里找到所需信息.它利用约定俗成的字符结构表达式来发生作用.不幸的是,简单的正则表达式对于一些高级运用,功能远远不够.若要进行筛选的结构比较复杂,你可能就需要用到高级正则表达式. 本文为您介绍正则表达式的高级技巧.我们筛选出了八个常用的概念,并配上实例解析,每个例子都是满足某种复杂要求的简单写法.如果你对正则的基本概念尚缺乏了解,请先阅读这篇文章,或者这个教程,或者维基条目. 这里的正则语法

正则表达式的高级技巧8个常用的概念

正则表达式高级技巧背后的关键概念 英文原文来自 Smashing Magazine .由 笨活儿 翻译.转载请注明出处. 正则表达式(Regular Expression, abbr. regex) 功能强大,能够用于在一大串字符里找到所需信息.它利用约定俗成的字符结构表达式来发生作用.不幸的是,简单的正则表达式对于一些高级运用,功能远远不够.若要进行筛选的结构比较复杂,你可能就需要用到高级正则表达式. 本文为您介绍正则表达式的高级技巧.我们筛选出了八个常用的概念,并配上实例解析,每个例子都是满

正则表达式的高级技巧分享_正则表达式

正则表达式(regular expression abbr. regex) 功能强大,能够用于在一大串字符里找到所需信息.它利用约定俗成的字符结构表达式来发生作用.不幸的是,简单的正则表达式对于一些高级运用,功能远远不够.若要进行筛选的结构比较复杂,你可能就需要用到高级正则表达式. 本文介绍正则表达式的高级技巧.筛选出了八个常用的概念,并配上实例解析,每个例子都是满足某种复杂要求的简单写法.如果你对正则的基本概念尚缺乏了解,请先阅读这篇文章,或者这个教程,或者维基条目. 这里的正则语法适用于ph

正则表达式的高级技巧分享

正则表达式(regular expression abbr. regex) 功能强大,能够用于在一大串字符里找到所需信息.它利用约定俗成的字符结构表达式来发生作用.不幸的是,简单的正则表达式对于一些高级运用,功能远远不够.若要进行筛选的结构比较复杂,你可能就需要用到高级正则表达式. 本文介绍正则表达式的高级技巧.筛选出了八个常用的概念,并配上实例解析,每个例子都是满足某种复杂要求的简单写法.如果你对正则的基本概念尚缺乏了解,请先阅读这篇文章,或者这个教程,或者维基条目. 这里的正则语法适用于ph

正则表达式——详细讲解平衡组

这篇文章适合你吗? 要读懂这篇文章的精髓,你最好要有一点正则匹配原理的基础.比如".*?"匹配文本内容"asp163",稍懂正则表达式的人都知道可以匹配,但是你知道他的匹配过程吗?如果你不太清楚,那么下面的内容,对你来说可能不太适合,或许,看的太吃力且无法领悟平衡组的用法.因此,我建议你先了解正则表达式NFA引擎的匹配原理.想要整理一份易懂易描述的话,的确要费些时间,但不知道这篇内容会不会达到我预期的效果.慢慢完善吧~(注:这是我2010年写的,现在拿过来,有时间将

Linux基础之正则表达式,用户、组管理命令介绍_Linux

通配符(Globbing) 通配符与元字符类似,通配符主要用于文件名的匹配,而元字符则主要用在字符串的匹配上: 下面介绍几种常用的通配符: * 表示匹配任意位数的任意字符 ? 表示匹配一位任意字符 ^ 表示取反,不包含的意思 [] 表示此区间内的任意一个字符 {} 表示一种集合 \ 转义字符,使具有特殊意义的字符失去原有意义 | 表示'或',匹配一组可选的字符 元字符 元字符是用来描述字符的特殊字符. 常用的元字符及意义如下: * 重复前面的字符0次或者多次 . 匹配任意字符一次 \+ 匹配前面

Linux用户与组的概念

一.用户与组的概念 1.理解linux多用户,多任务的特性 Linux是一个真实的.完整的多用户多任务操作系统,多用户多任务就是可以在系统上建立多个用户,而多个用户可以在同一时间内登录同一个系统执行各自不同的任务,而互不影响,例如某台linux服务器上有4个用户,分别是root.www.ftp和mysql,在同一时间内,root用户可能在查看系统日志,管理维护系统,www用户可能在修改自己的网页程序,ftp用户可能在上传软件到服务器,mysql用户可能在执行自己的SQL查询,每个用户互不干扰,有