正则表达式编译
正则表达式,是我们在做文本查找和处理时经常用到的。关于它的一些基础知识和教程,请参考下面的一些链接
http://unibetter.com/deerchao/zhengzhe-biaodashi-jiaocheng-se.htm
使用正则表达式并不难,关键就在于编写一个合适的pattern。说到这里,就不得不提一下regexlib这个网站,里面有好多写好的正则表达式。我就经常光顾这个网站,进行一些搜索。据说咱国内也有哥们做了一个类似的网站,地址不记得了
在.NET里面使用正则表达式,主要就是使用System.Text.RegularExpressions.Regex这个类。具体的用法可以参考帮助文档。
但是,每次都编写pattern,似乎并不是很理想。所以,Regex还提供了一个方法CompileToAssembly,这样,我们就可以把一些常用的表达式编译起来,以便重复使用。为此,我专门写了一个工具
以下代码把两个正则表达式编译到E:\Temp\sampleassembly.dll这个程序集中
string outFile = @"e:\temp\sampleassembly.dll";
List<RegexCompilationInfo> infos = new List<RegexCompilationInfo>();
RegexCompilationInfo info = new RegexCompilationInfo(@"\d{5,10}", RegexOptions.Compiled | RegexOptions.IgnoreCase, "Number", "SampleNamespace", true);
infos.Add(info);
infos.Add(new RegexCompilationInfo(@"^\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,3}$", RegexOptions.IgnoreCase | RegexOptions.Compiled, "Email", "SampleNamespace", true));
System.Reflection.AssemblyName an = new System.Reflection.AssemblyName(System.IO.Path.GetFileNameWithoutExtension(outFile));
string currentDir = Environment.CurrentDirectory;
Environment.CurrentDirectory = System.IO.Path.GetDirectoryName(outFile); //切换一下当前目录的目的是使得编译的时候,可以把程序集放到相应的目录中去
Regex.CompileToAssembly(infos.ToArray(),an);
Environment.CurrentDirectory = currentDir;
编译好之后,在客户程序中使用的话,大致是这样的:
1. 添加对程序集的引用
2. 实例化里面的类型,然后调用相关方法。例如
SampleNamespace.Number numberRegex = new SampleNamespace.Number();
MessageBox.Show(numberRegex.IsMatch("12345").ToString());
值得注意的是,因为正则表达式的pattern已经被编译到了程序集,所以这边的IsMatch方法只需要输入需要验证的文本即可。
另外,在编写这个小工具的时候,偶然发现有一个哥们已经写了一个Console App,也是做这个事情的。下面链接可以供参考