正则表达式使模式匹配和数据提取变得更容易

正则表达式使模式匹配和数据提取变得更容易

ID:20391425

大小:81.50 KB

页数:12页

时间:2018-10-13

正则表达式使模式匹配和数据提取变得更容易_第1页
正则表达式使模式匹配和数据提取变得更容易_第2页
正则表达式使模式匹配和数据提取变得更容易_第3页
正则表达式使模式匹配和数据提取变得更容易_第4页
正则表达式使模式匹配和数据提取变得更容易_第5页
资源描述:

《正则表达式使模式匹配和数据提取变得更容易》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、MSDN杂志>主页>所有期刊>2007>二月>SQLServer2005:正则表达式使模式匹配和数据提取变得更容易SQLServer2005正则表达式使模式匹配和数据提取变得更容易DavidBanister本文讨论:使用正则表达式进行高效的SQL查询SQLServer2005对正则表达式的支持从SQLServer使用.NETRegex类在数据库中有效地使用正则表达式本文使用了以下技术:SQLServer2005,.NETFramework下载本文中所用的代码:Regex2007_02.exe(154KB)浏览在线代码目录CLR用

2、户定义函数模式匹配数据提取模式存储匹配在匹配项中进行数据提取总结尽管T-SQL对多数数据处理而言极其强大,但它对文本分析或操作所提供的支持却很少。尝试使用内置的字符串函数执行任何复杂的文本分析会导致难于调试和维护的庞大的函数和存储过程。有更好的办法吗?实际上,正则表达式提供了更高效且更佳的解决方案。它在比较文本以便标识记录方面的益处显而易见,但是它的用途并不仅限于此。我们将介绍如何执行各种简单或令人惊异的任务,这些任务在SQLServer™2000中被视为不切实际或不可能的,但现在由于SQLServer2005对托管公共语言运行

3、库(CLR)的支持而可行。正则表达式对SQL来说并非新事物。Oracle在10g中引进了内置的正则表达式,而且许多开源数据库解决方案也使用某种正则表达式库。实际上,正则表达式可在SQLServer的早期版本中使用,但是过程的效率很低。如果使用sp_OACreate存储过程,则可以使用任何实现正则表达式的OLE自动化对象,但您必须首先创建一个COM对象,至少调用IDispatch一次,然后销毁此对象。多数情况下,这样做效率太低而且导致了太多性能问题。唯一的备选方案是创建扩展的存储过程。然而,现在有SQLCLR,CLR用户定义函数(

4、UDF),它允许您使用Microsoft®.NETFramework创建高效的且减少了出错可能性的函数集。CLR用户定义函数CLR用户定义函数只是在.NET程序集中定义的静态方法(VisualBasic中的共享函数)。要使用SQLCLR对象,您必须使用新的CREATEASSEMBLY语句在SQLServer注册程序集,然后在程序集中创建指向其实现的各个对象。对函数而言,CREATEFUNCTION语句已扩展为支持创建CLR用户定义函数。为了简化操作,使用SQLServerProject时,VisualStudio®2005将代表

5、您处理所有注册过程。此类项目与多数VisualStudio项目不同,因为当您尝试调试(或启动而未调试)时,项目将被重新编译,生成的程序集以及其中定义的所有SQLCLR对象将随后部署到SQLServer,然后注册到SQLServer。然后,IDE将运行为项目指定的测试脚本。可以在SQL脚本和您的.NET代码中设置断点,这样可以简化调试过程。添加函数就像将新类添加到任何其他项目类型一样。仅将一个新项添加到项目并且在提示时选择“用户定义函数”。新方法则被添加到包含所有函数的局部类。新方法还将有一个适用它的SqlFunction属性。V

6、isualStudio使用此属性来创建注册函数所需的SQL语句。SqlFunction中的IsDeterministic、IsPrecise、DataAccess和SystemDataAccess字段也由SQLServer用于各种用途。模式匹配确定字符串是否与模式匹配是对正则表达式的最简单应用,如图1所示,而且易于操作。Figure1字符串匹配复制代码publicstaticpartialclassUserDefinedFunctions{publicstaticreadonlyRegexOptionsOptions=Regex

7、Options.IgnorePatternWhitespace

8、RegexOptions.Singleline;[SqlFunction]publicstaticSqlBooleanRegexMatch(SqlCharsinput,SqlStringpattern){Regexregex=newRegex(pattern.Value,Options);returnregex.IsMatch(newstring(input.Value));}}首先,我使用“选项”字段来存储函数的正则表达式选项。在此情况下,我选择了RegexOpt

9、ions.SingleLine和RegexOptions.IgnorePatternWhitespace。前者指定单行模式,而后者则从正则表达式消除保留的空格并且启用由磅符号标记的注释。仔细考虑和分析后,您可能想要使用的另一个选项是RegexOption.Com

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。