C# 2005 & .Net 3.0高级编程
第5版 第8章集合 8.2.3显示结果
page 216、217
原文:
static void Main()
{
Find1();
Console.ReadLine();
}
很不幸,书上提供的代码是Find2,翻阅第6版的扫描版(page 198、199),问题一样,没办法,在网上找英文版,英文版的书写也是一样错误。
翻看第5版及第6版的源代码,源代码与书上的引用的字符串不一致,当然结果也不会一致。
英文版图书为CHM格式,下载地址为:http://ajax.cnrui.cn/soft/4/42/2007/20070822589.html
随书源代码如下:
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
namespace Wrox.ProCSharp.RegularExpressionPlayaround
{
class MainEntryPoint
{
static void Main()
{
Find1();
Console.ReadLine();
}
static void Find1()
{
string text = @"XML has made a major impact in almost every aspect of
software development. Designed as an open, extensible, self-describing
language, it has become the standard for data and document delivery on
the web. The panoply of XML-related technologies continues to develop
at breakneck speed, to enable validation, navigation, transformation,
linking, querying, description, and messaging of data.";
string pattern = @"/bn/S*ion/b";
MatchCollection matches = Regex.Matches(text, pattern,
RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace |
RegexOptions.ExplicitCapture);
WriteMatches(text, matches);
}
static void Find2()
{
string text = @"XML has made a major impact in almost every aspect of
software development. Designed as an open, extensible, self-describing
language, it has become the standard for data and document delivery on
the web. The panoply of XML-related technologies continues to develop
at breakneck speed, to enable validation, navigation, transformation,
linking, querying, description, and messaging of data.";
string pattern = @"/bn";
MatchCollection matches = Regex.Matches(text, pattern,
RegexOptions.IgnoreCase);
WriteMatches(text, matches);
}
static void WriteMatches(string text, MatchCollection matches)
{
Console.WriteLine("Original text was: /n/n" + text + "/n");
Console.WriteLine("No. of matches: " + matches.Count);
foreach (Match nextMatch in matches)
{
int Index = nextMatch.Index;
string result = nextMatch.ToString();
int charsBefore = (Index < 5) ? Index : 5;
int fromEnd = text.Length - Index - result.Length;
int charsAfter = (fromEnd < 5) ? fromEnd : 5;
int charsToDisplay = charsBefore + charsAfter + result.Length;
Console.WriteLine("Index: {0}, /tString: {1}, /t{2}",
Index, result,
text.Substring(Index - charsBefore, charsToDisplay));
}
}
}
}