C#.NET还是比较常见的东西,这里我们主要介绍C#.NET regexp类,包括介绍基于过程和基于表达式方法的比较等方面。
多少年来,许多的编程语言和工具都包含对规则表达式的支持,.NET基础类库中包含有一个名字空间和一系列可以充分发挥规则表达式威力的类,而且它们也都与未来的Perl 5中的规则表达式兼容。
此外,C#.NET regexp类还能够完成一些其他的功能,例如从右至左的结合模式和表达式的编辑等。
在这篇文章中,我将简要地介绍System.Text.RegularExpression中的类和方法、一些字符串匹配和替换的例子以及组结构的详细情况,***,还会介绍一些你可能会用到的常见的表达式。
应该掌握的基础知识
规则表达式的知识可能是不少编程人员“常学常忘”的知识之一。在这篇文章中,我们将假定你已经掌握了规则表达式的用法,尤其是Perl 5中表达式的用法。C#.NET regexp类是Perl 5中表达式的一个超集,因此,从理论上说它将作为一个很好的起点。我们还假设你具有了C#的语法和.NET架构的基本知识。
如果你没有规则表达式方面的知识,我建议你从Perl 5的语法着手开始学习。在规则表达式方面的权威书籍是由杰弗里·弗雷德尔编写的《掌握表达式》一书,对于希望深刻理解表达式的读者,我们强烈建议阅读这本书。
RegularExpression组合体
regexp规则类包含在System.Text.RegularExpressions.dll文件中,在对应用软件进行编译时你必须引用这个文件,例如,csc r:System.Text.RegularExpressions.dll foo.cs命令将创建foo.exe文件,它就引用了System.Text.RegularExpressions文件。
基于过程和基于表达式方法的比较
一般情况下,使用规则表达式的用户可以分为以下二大类:***类用户尽量不使用规则表达式,而是使用过程来执行一些需要重复的操作;第二类用户则充分利用规则表达式处理引擎的功能和威力,而尽可能少地使用过程。
对于我们大多数用户而言,***的方案莫过于二者兼而用之了。我希望这篇文章能够说明C#.NET regexp类的作用以及它在性能和复杂性之间的优、劣点。
基于过程的模式
我们在编程中经常需要用到的一个功能是对字符串中的一部分进行匹配或其他一些对字符串处理,下面是一个对字符串中的单词进行匹配的例子:
- string text = "the quick red fox jumped over the lazy brown dog.";
- System.Console.WriteLine("text=[" + text + "]");
- string result = "";
- string pattern = @"\w+|\W+";
- foreach (Match m in Regex.Matches(text, pattern))
- {
- // 取得匹配的字符串
- string x = m.ToString();
- // 如果***个字符是小写
- if (char.IsLower(x[0]))
- // 变成大写
- x = char.ToUpper(x[0]) + x.Substring(1, x.Length-1);
- // 收集所有的字符
- result += x;
- }
- System.Console.WriteLine("result=[" + result + "]");
【编辑推荐】