Sql server 我可以在SQL Server 2014中使用正则表达式捕获组吗?

Sql server 我可以在SQL Server 2014中使用正则表达式捕获组吗?,sql-server,regex,sql-server-2014,capturing-group,Sql Server,Regex,Sql Server 2014,Capturing Group,我在SQL Server 2014表中有一些文本数据,我想在其中检测复杂模式,并提取文本的某些部分(如果文本与模式匹配)。因此,我需要捕获组 (^|§|[^a-z0-9])vol[^a-z0-9]*([a-z]?[0-9]+[a-z]?) 例如 从文本中 "Some title, Some Journal name, vol. 5, p. 20-22" 我想拿到卷号 , vol\. ([0-9]+), p\. [0-9]+ 请注意,我已经简化了这个用例以提高可读性。上述用例可以在不捕获组的

我在SQL Server 2014表中有一些文本数据,我想在其中检测复杂模式,并提取文本的某些部分(如果文本与模式匹配)。因此,我需要捕获组

(^|§|[^a-z0-9])vol[^a-z0-9]*([a-z]?[0-9]+[a-z]?)
例如
从文本中

"Some title, Some Journal name, vol. 5, p. 20-22"
我想拿到卷号

, vol\. ([0-9]+), p\. [0-9]+
请注意,我已经简化了这个用例以提高可读性。上述用例可以在不捕获组的情况下解决。实际用例处理更多的异常,例如:

  • 包含“卷”的期刊/标题
  • 卷号/包含字母的页码
  • “vol”后面跟着“:”或“;”而不是“.”
我使用的实际正则表达式如下(然而,这不是关于正则表达式结构的问题,只是详细说明为什么需要捕获组)

据我所知,有两种方法可以将正则表达式功能引入SQL Server

  • 通过CLR:。然而,这个例子(从2009年开始)并不支持团体。有没有什么常用的解决方案
  • 通过安装主数据服务

由于安装和设置整个Master Data Services软件包对于获得一些Regex功能感觉有些过分,我希望有一个简单、通用的解决方法…

我发现了一个非常易于安装的CLR实现,其中包括Regex捕获组功能

我已将其安装在一个名为“SQL#”的单独数据库中(只需使用提供的installation.SQL脚本),函数位于一个同名的模式中。因此,我可以使用以下功能:

select SQL#.SQL#.RegEx_CaptureGroup( 'test (2005) test', '\((20[012][0-9]|19[5-9][0-9])\)', 1, NULL, 1, -1, '');

如果SQL Server中默认包含此选项,那就太好了…

“我希望有一个简单、通用的解决方法”-是的,CLR。NET正则表达式支持捕获组,所以请编写所需的代码并进行部署。@MartinSmith:这已经很好了。我不熟悉SQL Server(来自Oracle)和.NET。我甚至不知道什么是“CLR”,除了它可以帮助我使用.NET正则表达式功能之外。因此,我想知道是否有任何解决方案可用,我不必自己编写代码。喜欢即插即用。因为我假设我不是第一个需要此功能的人。@如果想了解有关使用SQLCLR的更多信息,请参阅我在SQL Server Central上编写的关于此主题的系列文章:(仅供参考:阅读该网站的内容需要免费注册,但值得:-)。您好。我是的创建者,我想提几件事:1)我最近发布了V4.0,其中包括许多性能增强,包括RegEx_CaptureGroup,2)现在有一个RegEx_CaptureGroupCapture函数来获取特定组的特定重复,3)完整版本(即非免费)包括TVFs RegEx_CaptureGroups和RegEx_CaptureGroupCapture以获取字符串中的所有实例,以及4)使用时