﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-C++ Jounior-随笔分类-文章转载学习</title><link>http://www.cppblog.com/snowball/category/6586.html</link><description>once setback,once inspiration,once self-awareness&lt;br&gt;
重要的是这个磨练过程，而不是结果，要的是你粗壮的腿，而不是你身上背的那袋盐巴</description><language>zh-cn</language><lastBuildDate>Sun, 06 Jul 2008 15:10:27 GMT</lastBuildDate><pubDate>Sun, 06 Jul 2008 15:10:27 GMT</pubDate><ttl>60</ttl><item><title>面向对象的三个基本特征（讲解）</title><link>http://www.cppblog.com/snowball/archive/2008/07/01/55051.html</link><dc:creator>snowball</dc:creator><author>snowball</author><pubDate>Tue, 01 Jul 2008 08:10:00 GMT</pubDate><guid>http://www.cppblog.com/snowball/archive/2008/07/01/55051.html</guid><wfw:comment>http://www.cppblog.com/snowball/comments/55051.html</wfw:comment><comments>http://www.cppblog.com/snowball/archive/2008/07/01/55051.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/snowball/comments/commentRss/55051.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/snowball/services/trackbacks/55051.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 面向对象的三个基本特征（讲解）																								面向对象的三个基本特征是：封装、继承、多态。																																																																																													...&nbsp;&nbsp;<a href='http://www.cppblog.com/snowball/archive/2008/07/01/55051.html'>阅读全文</a><img src ="http://www.cppblog.com/snowball/aggbug/55051.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/snowball/" target="_blank">snowball</a> 2008-07-01 16:10 <a href="http://www.cppblog.com/snowball/archive/2008/07/01/55051.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>.net中的正则表达式使用高级技巧 </title><link>http://www.cppblog.com/snowball/archive/2008/04/02/46023.html</link><dc:creator>snowball</dc:creator><author>snowball</author><pubDate>Wed, 02 Apr 2008 05:42:00 GMT</pubDate><guid>http://www.cppblog.com/snowball/archive/2008/04/02/46023.html</guid><wfw:comment>http://www.cppblog.com/snowball/comments/46023.html</wfw:comment><comments>http://www.cppblog.com/snowball/archive/2008/04/02/46023.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/snowball/comments/commentRss/46023.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/snowball/services/trackbacks/46023.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: reference :http://www.cnblogs.com/thinhunan/archive/2007/08/21/339316.html.net中的正则表达式使用高级技巧																																										前言																																					...&nbsp;&nbsp;<a href='http://www.cppblog.com/snowball/archive/2008/04/02/46023.html'>阅读全文</a><img src ="http://www.cppblog.com/snowball/aggbug/46023.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/snowball/" target="_blank">snowball</a> 2008-04-02 13:42 <a href="http://www.cppblog.com/snowball/archive/2008/04/02/46023.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C#正则表达式整理备忘 </title><link>http://www.cppblog.com/snowball/archive/2008/04/02/46022.html</link><dc:creator>snowball</dc:creator><author>snowball</author><pubDate>Wed, 02 Apr 2008 05:40:00 GMT</pubDate><guid>http://www.cppblog.com/snowball/archive/2008/04/02/46022.html</guid><wfw:comment>http://www.cppblog.com/snowball/comments/46022.html</wfw:comment><comments>http://www.cppblog.com/snowball/archive/2008/04/02/46022.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/snowball/comments/commentRss/46022.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/snowball/services/trackbacks/46022.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: reference :http://www.cnblogs.com/KissKnife/archive/2008/03/23/1118423.html有一段时间，正则表达式学习很火热很潮流，当时在CSDN一天就能看到好几个正则表达式的帖子，那段时间借助论坛以及Wrox Press出版的《C#字符串和正则表达式参考手册》学习了一些基础的知识，同时也为我在CSDN大概赚了1000分，今天想起来，去找《...&nbsp;&nbsp;<a href='http://www.cppblog.com/snowball/archive/2008/04/02/46022.html'>阅读全文</a><img src ="http://www.cppblog.com/snowball/aggbug/46022.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/snowball/" target="_blank">snowball</a> 2008-04-02 13:40 <a href="http://www.cppblog.com/snowball/archive/2008/04/02/46022.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>解读C＃中的规则表达式[转] </title><link>http://www.cppblog.com/snowball/archive/2008/04/02/46021.html</link><dc:creator>snowball</dc:creator><author>snowball</author><pubDate>Wed, 02 Apr 2008 05:37:00 GMT</pubDate><guid>http://www.cppblog.com/snowball/archive/2008/04/02/46021.html</guid><wfw:comment>http://www.cppblog.com/snowball/comments/46021.html</wfw:comment><comments>http://www.cppblog.com/snowball/archive/2008/04/02/46021.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/snowball/comments/commentRss/46021.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/snowball/services/trackbacks/46021.html</trackback:ping><description><![CDATA[
		<p>
				<font size="2">reference : <a href="http://www.chinaaspx.com/Comm/Dotnetbbs/Showtopic.aspx?Forum_ID=5&amp;Id=5250&amp;Page=1">http://www.chinaaspx.com/Comm/Dotnetbbs/Showtopic.aspx?Forum_ID=5&amp;Id=5250&amp;Page=1</a><br />多少年来，许多的编程语言和工具都包含对规则表达式的支持，.NET基础类库中包含有一个名字空间和一系列可以充分发挥规则表达式威力的类，而且它们也都与未来的Perl 5中的规则表达式兼容。  </font>
		</p>
		<p>
				<font size="2">　　此外，regexp类还能够完成一些其他的功能，例如从右至左的结合模式和表达式的编辑等。  </font>
		</p>
		<p>
				<font size="2">　　在这篇文章中，我将简要地介绍System.Text.RegularExpression中的类和方法、一些字符串匹配和替换的例子以及组结构的详细情况，最后，还会介绍一些你可能会用到的常见的表达式。  </font>
		</p>
		<p>
				<font size="2">应该掌握的基础知识  <br />　　规则表达式的知识可能是不少编程人员“常学常忘”的知识之一。在这篇文章中，我们将假定你已经掌握了规则表达式的用法，尤其是Perl 5中表达式的用法。.NET的regexp类是Perl 5中表达式的一个超集，因此，从理论上说它将作为一个很好的起点。我们还假设你具有了C#的语法和.NET架构的基本知识。  </font>
		</p>
		<p>
				<font size="2">　　如果你没有规则表达式方面的知识，我建议你从Perl 5的语法着手开始学习。在规则表达式方面的权威书籍是由杰弗里·弗雷德尔编写的《掌握表达式》一书，对于希望深刻理解表达式的读者，我们强烈建议阅读这本书。  </font>
		</p>
		<p>
				<font size="2">RegularExpression组合体  <br />　　regexp规则类包含在System.Text.RegularExpressions.dll文件中，在对应用软件进行编译时你必须引用这个文件，例如，csc r:System.Text.RegularExpressions.dll foo.cs命令将创建foo.exe文件，它就引用了System.Text.RegularExpressions文件。  </font>
		</p>
		<p>
				<font size="2">名字空间简介  <br />　　在名字空间中仅仅包含着6个类和一个定义，它们是：  </font>
		</p>
		<p>
				<font size="2">　　Capture: 包含一次匹配的结果；  </font>
		</p>
		<p>
				<font size="2">　　CaptureCollection: Capture的序列；  </font>
		</p>
		<p>
				<font size="2">　　Group: 一次组记录的结果，由Capture继承而来；  </font>
		</p>
		<p>
				<font size="2">　　Match: 一次表达式的匹配结果，由Group继承而来；  </font>
		</p>
		<p>
				<font size="2">　　MatchCollection: Match的一个序列；  </font>
		</p>
		<p>
				<font size="2">　　MatchEvaluator: 执行替换操作时使用的代理；  </font>
		</p>
		<p>
				<font size="2">　　Regex：编译后的表达式的实例。  </font>
		</p>
		<p>
				<font size="2">　　Regex类中还包含一些静态的方法：  </font>
		</p>
		<p>
				<font size="2">　　Escape: 对字符串中的regex中的转义符进行转义；  </font>
		</p>
		<p>
				<font size="2">　　IsMatch: 如果表达式在字符串中匹配，该方法返回一个布尔值；  </font>
		</p>
		<p>
				<font size="2">　　Match: 返回Match的实例；  </font>
		</p>
		<p>
				<font size="2">　　Matches: 返回一系列的Match的方法；  </font>
		</p>
		<p>
				<font size="2">　　Replace: 用替换字符串替换匹配的表达式；  </font>
		</p>
		<p>
				<font size="2">　　Split: 返回一系列由表达式决定的字符串；  </font>
		</p>
		<p>
				<font size="2">　　Unescape:不对字符串中的转义字符转义。  </font>
		</p>
		<p>
				<font size="2">简单匹配  <br />　　我们首先从使用Regex、Match类的简单表达式开始学习。  </font>
		</p>
		<p>
				<font size="2">　　Match m = Regex.Match("abracadabra", "(a|b|r)+");  </font>
		</p>
		<p>
				<font size="2">　　我们现在有了一个可以用于测试的Match类的实例，例如：if (m.Success)...  </font>
		</p>
		<p>
				<font size="2">　　如果想使用匹配的字符串，可以把它转换成一个字符串：  </font>
		</p>
		<p>
				<font size="2">　　Console.WriteLine("Match="+m.ToString());  </font>
		</p>
		<p>
				<font size="2">　　这个例子可以得到如下的输出: Match=abra。这就是匹配的字符串了。  </font>
		</p>
		<p>
				<font size="2">字符串的替换  <br />　　简单字符串的替换非常直观。例如下面的语句：  </font>
		</p>
		<p>
				<font size="2">　　string s = Regex.Replace("abracadabra", "abra", "zzzz");  </font>
		</p>
		<p>
				<font size="2">　　它返回字符串zzzzcadzzzz，所有匹配的字符串都被替换成了zzzzz。  </font>
		</p>
		<p>
				<font size="2">　　现在我们来看一个比较复杂的字符串替换的例子：  </font>
		</p>
		<p>
				<font size="2">　　string s = Regex.Replace(" abra ", @"^\s*(.*?)\s*$", "$1");  </font>
		</p>
		<p>
				<font size="2">　　这个语句返回字符串abra，其前导和后缀的空格都去掉了。  </font>
		</p>
		<p>
				<font size="2">　　上面的模式对于删除任意字符串中的前导和后续空格都非常有用。在C#中，我们还经常使用字母字符串，在一个字母字符串中，编译程序不把字符“ \” 作为转义字符处理。在使用字符“\”指定转义字符时，@"..."是非常有用的。另外值得一提的是$1在字符串替换方面的使用，它表明替换字符串只能包含被替换的字符串。  </font>
		</p>
		<p>
				<font size="2">匹配引擎的细节  <br />　　现在，我们通过一个组结构来理解一个稍微复杂的例子。看下面的例子：  </font>
		</p>
		<p>
				<font size="2">　　string text = "abracadabra1abracadabra2abracadabra3";  </font>
		</p>
		<p>
				<font size="2">　　string pat = @"  </font>
		</p>
		<p>
				<font size="2">　　　　( # 第一个组的开始  </font>
		</p>
		<p>
				<font size="2">　　　　 abra # 匹配字符串abra  </font>
		</p>
		<p>
				<font size="2">　　　　 ( # 第二个组的开始  </font>
		</p>
		<p>
				<font size="2">　　　　 cad # 匹配字符串cad  </font>
		</p>
		<p>
				<font size="2">　　　　 )? # 第二个组结束（可选）  </font>
		</p>
		<p>
				<font size="2">　　　　) # 第一个组结束  </font>
		</p>
		<p>
				<font size="2">　　　　+ # 匹配一次或多次  </font>
		</p>
		<p>
				<font size="2">　　　　";  </font>
		</p>
		<p>
				<font size="2">　　//利用x修饰符忽略注释  </font>
		</p>
		<p>
				<font size="2">　　Regex r = new Regex(pat, "x");  </font>
		</p>
		<p>
				<font size="2">　　//获得组号码的清单  </font>
		</p>
		<p>
				<font size="2">　　int[] gnums = r.GetGroupNumbers();  </font>
		</p>
		<p>
				<font size="2">　　//首次匹配  </font>
		</p>
		<p>
				<font size="2">　　Match m = r.Match(text);  </font>
		</p>
		<p>
				<font size="2">　　while (m.Success)  </font>
		</p>
		<p>
				<font size="2">　　 {  </font>
		</p>
		<p>
				<font size="2">　　//从组1开始  </font>
		</p>
		<p>
				<font size="2">　　 for (int i = 1; i &lt; gnums.Length; i++)  </font>
		</p>
		<p>
				<font size="2">　　　　{  </font>
		</p>
		<p>
				<font size="2">　　　　Group g = m.Group(gnums[i]);  </font>
		</p>
		<p>
				<font size="2">　　//获得这次匹配的组  </font>
		</p>
		<p>
				<font size="2">　　　　Console.WriteLine("Group"+gnums[i]+"=["+g.ToString()+"]");  </font>
		</p>
		<p>
				<font size="2">　　//计算这个组的起始位置和长度  </font>
		</p>
		<p>
				<font size="2">　　　　CaptureCollection cc = g.Captures;  </font>
		</p>
		<p>
				<font size="2">　　　　for (int j = 0; j &lt; cc.Count; j++)  </font>
		</p>
		<p>
				<font size="2">　　　　 {  </font>
		</p>
		<p>
				<font size="2">　　　　 Capture c = cc[j];  </font>
		</p>
		<p>
				<font size="2">　　　　 Console.WriteLine(" Capture" + j + "=["+c.ToString()  </font>
		</p>
		<p>
				<font size="2">　　　　　　 + "] Index=" + c.Index + " Length=" + c.Length);  </font>
		</p>
		<p>
				<font size="2">　　　　 }  </font>
		</p>
		<p>
				<font size="2">　　　　}  </font>
		</p>
		<p>
				<font size="2">　　//下一个匹配  </font>
		</p>
		<p>
				<font size="2">　　 m = m.NextMatch();  </font>
		</p>
		<p>
				<font size="2">　　 }  </font>
		</p>
		<p>
				<font size="2">　　这个例子的输出如下所示：  </font>
		</p>
		<p>
				<font size="2">　　Group1=[abra]  </font>
		</p>
		<p>
				<font size="2">　　　　　　Capture0=[abracad] Index=0 Length=7  </font>
		</p>
		<p>
				<font size="2">　　　　　　Capture1=[abra] Index=7 Length=4  </font>
		</p>
		<p>
				<font size="2">　　Group2=[cad]  </font>
		</p>
		<p>
				<font size="2">　　　　　　Capture0=[cad] Index=4 Length=3  </font>
		</p>
		<p>
				<font size="2">　　Group1=[abra]  </font>
		</p>
		<p>
				<font size="2">　　　　　　Capture0=[abracad] Index=12 Length=7  </font>
		</p>
		<p>
				<font size="2">　　　　　　Capture1=[abra] Index=19 Length=4  </font>
		</p>
		<p>
				<font size="2">　　Group2=[cad]  </font>
		</p>
		<p>
				<font size="2">　　　　　　Capture0=[cad] Index=16 Length=3  </font>
		</p>
		<p>
				<font size="2">　　Group1=[abra]  </font>
		</p>
		<p>
				<font size="2">　　　　　　Capture0=[abracad] Index=24 Length=7  </font>
		</p>
		<p>
				<font size="2">　　　　　　Capture1=[abra] Index=31 Length=4  </font>
		</p>
		<p>
				<font size="2">　　Group2=[cad]  </font>
		</p>
		<p>
				<font size="2">　　　　　　Capture0=[cad] Index=28 Length=3  </font>
		</p>
		<p>
				<font size="2">　　我们首先从考查字符串pat开始，pat中包含有表达式。第一个capture是从第一个圆括号开始的，然后表达式将匹配到一个abra。第二个capture组从第二个圆括号开始，但第一个capture组还没有结束，这意味着第一个组匹配的结果是abracad ，而第二个组的匹配结果仅仅是cad。因此如果通过使用？符号而使cad成为一项可选的匹配，匹配的结果就可能是abra或abracad。然后，第一个组就会结束，通过指定+符号要求表达式进行多次匹配。  </font>
		</p>
		<p>
				<font size="2">　　现在我们来看看匹配过程中发生的情况。首先，通过调用Regex的constructor方法建立表达式的一个实例，并在其中指定各种选项。在这个例子中，由于在表达式中有注释，因此选用了x选项，另外还使用了一些空格。打开x选项，表达式将会忽略注释和其中没有转义的空格。  </font>
		</p>
		<p>
				<font size="2">　　然后，取得表达式中定义的组的编号的清单。你当然可以显性地使用这些编号，在这里使用的是编程的方法。如果使用了命名的组，作为一种建立快速索引的途径这种方法也十分有效。  </font>
		</p>
		<p>
				<font size="2">　　接下来是完成第一次匹配。通过一个循环测试当前的匹配是否成功，接下来是从group 1开始重复对组清单执行这一操作。在这个例子中没有使用group 0的原因是group 0是一个完全匹配的字符串，如果要通过收集全部匹配的字符串作为一个单一的字符串，就会用到group 0了。  </font>
		</p>
		<p>
				<font size="2">　　我们跟踪每个group中的CaptureCollection。通常情况下每次匹配、每个group中只能有一个capture，但本例中的Group1则有两个capture：Capture0和Capture1。如果你仅需要Group1的ToString，就会只得到abra，当然它也会与abracad匹配。组中ToString的值就是其CaptureCollection中最后一个Capture的值，这正是我们所需要的。如果你希望整个过程在匹配abra后结束，就应该从表达式中删除+符号，让regex引擎知道我们只需要对表达式进行匹配。  </font>
		</p>
		<p>
				<font size="2">基于过程和基于表达式方法的比较  <br />　　一般情况下，使用规则表达式的用户可以分为以下二大类：第一类用户尽量不使用规则表达式，而是使用过程来执行一些需要重复的操作；第二类用户则充分利用规则表达式处理引擎的功能和威力，而尽可能少地使用过程。  </font>
		</p>
		<p>
				<font size="2">　　对于我们大多数用户而言，最好的方案莫过于二者兼而用之了。我希望这篇文章能够说明.NET语言中regexp类的作用以及它在性能和复杂性之间的优、劣点。  </font>
		</p>
		<p>
				<font size="2">基于过程的模式  <br />　　我们在编程中经常需要用到的一个功能是对字符串中的一部分进行匹配或其他一些对字符串处理，下面是一个对字符串中的单词进行匹配的例子：  </font>
		</p>
		<p>
				<font size="2">　　string text = "the quick red fox jumped over the lazy brown dog.";  </font>
		</p>
		<p>
				<font size="2">　　System.Console.WriteLine("text=[" + text + "]");  </font>
		</p>
		<p>
				<font size="2">　　string result = "";  </font>
		</p>
		<p>
				<font size="2">　　string pattern = @"\w+|\W+";  </font>
		</p>
		<p>
				<font size="2">　　foreach (Match m in Regex.Matches(text, pattern))  </font>
		</p>
		<p>
				<font size="2">　　 {  </font>
		</p>
		<p>
				<font size="2">　　// 取得匹配的字符串  </font>
		</p>
		<p>
				<font size="2">　　 string x = m.ToString();  </font>
		</p>
		<p>
				<font size="2">　　// 如果第一个字符是小写  </font>
		</p>
		<p>
				<font size="2">　　 if (char.IsLower(x[0]))  </font>
		</p>
		<p>
				<font size="2">　　// 变成大写  </font>
		</p>
		<p>
				<font size="2">　　　　x = char.ToUpper(x[0]) + x.Substring(1, x.Length-1);  </font>
		</p>
		<p>
				<font size="2">　　// 收集所有的字符  </font>
		</p>
		<p>
				<font size="2">　　 result += x;  </font>
		</p>
		<p>
				<font size="2">　　 }  </font>
		</p>
		<p>
				<font size="2">　　System.Console.WriteLine("result=[" + result + "]");  </font>
		</p>
		<p>
				<font size="2">　　正象上面的例子所示，我们使用了C#语言中的foreach语句处理每个匹配的字符，并完成相应的处理，在这个例子中，新创建了一个result字符串。这个例子的输出所下所示：  </font>
		</p>
		<p>
				<font size="2">　　text=[the quick red fox jumped over the lazy brown dog.]  </font>
		</p>
		<p>
				<font size="2">　　result=[The Quick Red Fox Jumped Over The Lazy Brown Dog.]  </font>
		</p>
		<p>
				<font size="2">基于表达式的模式  <br />　　完成上例中的功能的另一条途径是通过一个MatchEvaluator，新的代码如下所示：  </font>
		</p>
		<p>
				<font size="2">　　static string CapText(Match m)  </font>
		</p>
		<p>
				<font size="2">　　　　{  </font>
		</p>
		<p>
				<font size="2">　　//取得匹配的字符串  </font>
		</p>
		<p>
				<font size="2">　　　　string x = m.ToString();  </font>
		</p>
		<p>
				<font size="2">　　// 如果第一个字符是小写  </font>
		</p>
		<p>
				<font size="2">　　　　if (char.IsLower(x[0]))  </font>
		</p>
		<p>
				<font size="2">　　// 转换为大写  </font>
		</p>
		<p>
				<font size="2">　　　　 return char.ToUpper(x[0]) + x.Substring(1, x.Length-1);  </font>
		</p>
		<p>
				<font size="2">　　　　return x;  </font>
		</p>
		<p>
				<font size="2">　　　　}  </font>
		</p>
		<p>
				<font size="2">　　　　  </font>
		</p>
		<p>
				<font size="2">　　 static void Main()  </font>
		</p>
		<p>
				<font size="2">　　　　{  </font>
		</p>
		<p>
				<font size="2">　　　　string text = "the quick red fox jumped over the  </font>
		</p>
		<p>
				<font size="2">　　　　 lazy brown dog.";  </font>
		</p>
		<p>
				<font size="2">　　　　System.Console.WriteLine("text=[" + text + "]");  </font>
		</p>
		<p>
				<font size="2">　　　　string pattern = @"\w+";  </font>
		</p>
		<p>
				<font size="2">　　　　string result = Regex.Replace(text, pattern,  </font>
		</p>
		<p>
				<font size="2">　　 new MatchEvaluator(Test.CapText));  </font>
		</p>
		<p>
				<font size="2">　　　　System.Console.WriteLine("result=[" + result + "]");  </font>
		</p>
		<p>
				<font size="2">　　　　}  </font>
		</p>
		<p>
				<font size="2">　　同时需要注意的是，由于仅仅需要对单词进行修改而无需对非单词进行修改，这个模式显得非常简单。  </font>
		</p>
		<p>
				<font size="2">常用表达式  <br />　　为了能够更好地理解如何在C#环境中使用规则表达式，我写出一些对你来说可能有用的规则表达式，这些表达式在其他的环境中都被使用过，希望能够对你有所帮助。  </font>
		</p>
		<p>
				<font size="2">罗马数字  <br />　　string p1 = "^m*(d?c{0,3}|c[dm])" + "(l?x{0,3}|x[lc])(v?i{0,3}|i[vx])$";  </font>
		</p>
		<p>
				<font size="2">　　string t1 = "vii";  </font>
		</p>
		<p>
				<font size="2">　　Match m1 = Regex.Match(t1, p1);  </font>
		</p>
		<p>
				<font size="2">交换前二个单词  <br />　　string t2 = "the quick brown fox";  </font>
		</p>
		<p>
				<font size="2">　　string p2 = @"(\S+)(\s+)(\S+)";  </font>
		</p>
		<p>
				<font size="2">　　Regex x2 = new Regex(p2);  </font>
		</p>
		<p>
				<font size="2">　　string r2 = x2.Replace(t2, "$3$2$1", 1);  </font>
		</p>
		<p>
				<font size="2">关健字=值  <br />　　string t3 = "myval = 3";  </font>
		</p>
		<p>
				<font size="2">　　string p3 = @"(\w+)\s*=\s*(.*)\s*$";  </font>
		</p>
		<p>
				<font size="2">　　Match m3 = Regex.Match(t3, p3);  </font>
		</p>
		<p>
				<font size="2">实现每行80个字符  <br />　　string t4 = "********************"  </font>
		</p>
		<p>
				<font size="2">　　 + "******************************"  </font>
		</p>
		<p>
				<font size="2">　　 + "******************************";  </font>
		</p>
		<p>
				<font size="2">　　string p4 = ".{80,}";  </font>
		</p>
		<p>
				<font size="2">　　Match m4 = Regex.Match(t4, p4);  </font>
		</p>
		<p>
				<font size="2">月/日/年 小时:分:秒的时间格式  <br />　　string t5 = "01/01/01 16:10:01";  </font>
		</p>
		<p>
				<font size="2">　　string p5 = @"(\d+)/(\d+)/(\d+) (\d+):(\d+):(\d+)";  </font>
		</p>
		<p>
				<font size="2">　　Match m5 = Regex.Match(t5, p5);  </font>
		</p>
		<p>
				<font size="2">改变目录（仅适用于Windows平台）  <br />string t6 = @"C:\Documents and Settings\user1\Desktop\";  </font>
		</p>
		<p>
				<font size="2">string r6 = Regex.Replace(t6,@"</font>
				<a href="file://\\user1\\">
						<font size="2">\\user1\\</font>
				</a>
				<font size="2">", @"</font>
				<a href="file://\\user2\\">
						<font size="2">\\user2\\</font>
				</a>
				<font size="2">");  </font>
		</p>
		<p>
				<font size="2">扩展16位转义符  <br />　　string t7 = "%41"; // capital A  </font>
		</p>
		<p>
				<font size="2">　　string p7 = "%([0-9A-Fa-f][0-9A-Fa-f])";  </font>
		</p>
		<p>
				<font size="2">　　string r7 = Regex.Replace(t7, p7, HexConvert);  </font>
		</p>
		<p>
				<font size="2">删除C语言中的注释（有待完善）  <br />　　string t8 = @"  </font>
		</p>
		<p>
				<font size="2">　　/*  </font>
		</p>
		<p>
				<font size="2">　　 * 传统风格的注释  </font>
		</p>
		<p>
				<font size="2">　　 */  </font>
		</p>
		<p>
				<font size="2">　　";  </font>
		</p>
		<p>
				<font size="2">　　string p8 = @"  </font>
		</p>
		<p>
				<font size="2">　　 /\* # 匹配注释开始的定界符  </font>
		</p>
		<p>
				<font size="2">　　 .*? # 匹配注释  </font>
		</p>
		<p>
				<font size="2">　　 \*/ # 匹配注释结束定界符  </font>
		</p>
		<p>
				<font size="2">　　";  </font>
		</p>
		<p>
				<font size="2">　　string r8 = Regex.Replace(t8, p8, "", "xs");  </font>
		</p>
		<p>
				<font size="2">删除字符串中开始和结束处的空格  <br />　　string t9a = " leading";  </font>
		</p>
		<p>
				<font size="2">　　string p9a = @"^\s+";  </font>
		</p>
		<p>
				<font size="2">　　string r9a = Regex.Replace(t9a, p9a, "");  </font>
		</p>
		<p>
				<font size="2">　　string t9b = "trailing ";  </font>
		</p>
		<p>
				<font size="2">　　string p9b = @"\s+$";  </font>
		</p>
		<p>
				<font size="2">　　string r9b = Regex.Replace(t9b, p9b, "");  </font>
		</p>
		<p>
				<font size="2">　　在字符\后添加字符n，使之成为真正的新行  </font>
		</p>
		<p>
				<font size="2">　　string t10 = @"\ntest\n";  </font>
		</p>
		<p>
				<font size="2">　　string r10 = Regex.Replace(t10, @"</font>
				<a href="file://\\n">
						<font size="2">\\n</font>
				</a>
				<font size="2">", "\n");  </font>
		</p>
		<p>
				<font size="2">转换IP地址  <br />　　string t11 = "55.54.53.52";  </font>
		</p>
		<p>
				<font size="2">　　string p11 = "^" +  </font>
		</p>
		<p>
				<font size="2">　　 @"([01]?\d\d|2[0-4]\d|25[0-5])\." +  </font>
		</p>
		<p>
				<font size="2">　　 @"([01]?\d\d|2[0-4]\d|25[0-5])\." +  </font>
		</p>
		<p>
				<font size="2">　　 @"([01]?\d\d|2[0-4]\d|25[0-5])\." +  </font>
		</p>
		<p>
				<font size="2">　　 @"([01]?\d\d|2[0-4]\d|25[0-5])" +  </font>
		</p>
		<p>
				<font size="2">　　 "$";  </font>
		</p>
		<p>
				<font size="2">　　Match m11 = Regex.Match(t11, p11);  </font>
		</p>
		<p>
				<font size="2">删除文件名包含的路径  <br />　　string t12 = @"c:\file.txt";  </font>
		</p>
		<p>
				<font size="2">　　string p12 = @"^.*\\";  </font>
		</p>
		<p>
				<font size="2">　　string r12 = Regex.Replace(t12, p12, "");  </font>
		</p>
		<p>
				<font size="2">联接多行字符串中的行  <br />　　string t13 = @"this is  </font>
		</p>
		<p>
				<font size="2">　　a split line";  </font>
		</p>
		<p>
				<font size="2">　　string p13 = @"\s*\r?\n\s*";  </font>
		</p>
		<p>
				<font size="2">　　string r13 = Regex.Replace(t13, p13, " ");  </font>
		</p>
		<p>
				<font size="2">提取字符串中的所有数字  <br />　　string t14 = @"  </font>
		</p>
		<p>
				<font size="2">　　test 1  </font>
		</p>
		<p>
				<font size="2">　　test 2.3  </font>
		</p>
		<p>
				<font size="2">　　test 47  </font>
		</p>
		<p>
				<font size="2">　　";  </font>
		</p>
		<p>
				<font size="2">　　string p14 = @"(\d+\.?\d*|\.\d+)";  </font>
		</p>
		<p>
				<font size="2">　　MatchCollection mc14 = Regex.Matches(t14, p14);  </font>
		</p>
		<p>
				<font size="2">找出所有的大写字母  <br />　　string t15 = "This IS a Test OF ALL Caps";  </font>
		</p>
		<p>
				<font size="2">　　string p15 = @"(\b[^\Wa-z0-9_]+\b)";  </font>
		</p>
		<p>
				<font size="2">　　MatchCollection mc15 = Regex.Matches(t15, p15);  </font>
		</p>
		<p>
				<font size="2">找出小写的单词  <br />　　string t16 = "This is A Test of lowercase";  </font>
		</p>
		<p>
				<font size="2">　　string p16 = @"(\b[^\WA-Z0-9_]+\b)";  </font>
		</p>
		<p>
				<font size="2">　　MatchCollection mc16 = Regex.Matches(t16, p16);  </font>
		</p>
		<p>
				<font size="2">找出第一个字母为大写的单词  <br />　　string t17 = "This is A Test of Initial Caps";  </font>
		</p>
		<p>
				<font size="2">　　string p17 = @"(\b[^\Wa-z0-9_][^\WA-Z0-9_]*\b)";  </font>
		</p>
		<p>
				<font size="2">　　MatchCollection mc17 = Regex.Matches(t17, p17);  </font>
		</p>
		<p>
				<font size="2">找出简单的HTML语言中的链接  <br />　　string t18 = @"  </font>
		</p>
		<p>
				<font size="2">　　&lt;html&gt;  </font>
		</p>
		<p>
				<font size="2">　　&lt;a href=""first.htm""&gt;first tag text&lt;/a&gt;  </font>
		</p>
		<p>
				<font size="2">　　&lt;a href=""next.htm""&gt;next tag text&lt;/a&gt;  </font>
		</p>
		<p>
				<font size="2">　　&lt;/html&gt;  </font>
		</p>
		<p>
				<font size="2">　　";  </font>
		</p>
		<p>
				<font size="2">　　string p18 = @"&lt;A[^&gt;]*?HREF\s*=\s*[""']?" + @"([^'"" &gt;]+?)[ '""]?&gt;";  </font>
		</p>
		<p>
				<font size="2">　　MatchCollection mc18 = Regex.Matches(t18, p18, "si"); <br /></font>
		</p>
<img src ="http://www.cppblog.com/snowball/aggbug/46021.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/snowball/" target="_blank">snowball</a> 2008-04-02 13:37 <a href="http://www.cppblog.com/snowball/archive/2008/04/02/46021.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>