【问题标题】:Can I use regex capturing groups in SQL Server 2014?我可以在 SQL Server 2014 中使用正则表达式捕获组吗?
【发布时间】:2017-01-17 07:43:36
【问题描述】:

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

例如
来自正文

"Some title, Some Journal name, vol. 5, p. 20-22"

我要抢卷号

, vol\. ([0-9]+), p\. [0-9]+

请注意,我已简化此用例以提高可读性。上述用例可以在不捕获组的情况下解决。实际用例处理更多异常,例如:

  • 包含“vol.”的期刊/标题。
  • 卷号/包含字母的页数
  • “vol”后跟“:”或“;”而不是“。”
  • ...

我使用的实际正则表达式如下(然而,这不是关于正则表达式结构的问题,只是详细说明我为什么需要捕获组)。

(^|§|[^a-z0-9])vol[^a-z0-9]*([a-z]?[0-9]+[a-z]?)

据我所知,有两种方法可以将 Regex 功能导入 SQL Server。

由于安装和设置整个 Master Data Services 包对于获得一些正则表达式功能来说有点过头了,我希望有一个简单、通用的出路...

【问题讨论】:

  • “我希望有一个简单、通用的出路”——是的,CLR。 .NET 正则表达式支持捕获组,因此请编写您需要的代码并进行部署。
  • @MartinSmith:很高兴知道这一点。我是 SQL Server 的新手(来自 Oracle)和 .NET 的新手。我什至不知道什么是“CLR”,除了它可以帮助我使用 .NET 正则表达式功能。因此,我想知道是否有任何可用的解决方案,我不必自己编写代码。就像...即插即用。因为我假设我不是第一个需要此功能的人。
  • @Wouter 要了解有关使用 SQLCLR 的更多信息,请参阅我在 SQL Server Central 上写的关于此主题的系列文章:Stairway to SQLCLR(仅供参考:需要免费注册才能阅读相关内容网站,但这是值得的 :-)。

标签: sql-server regex sql-server-2014 capturing-group


【解决方案1】:

我发现了一个超级容易安装的 CLR 实现,并且包括正则表达式捕获组函数。

http://www.sqlsharp.com/

我已将它安装在一个名为“SQL#”的单独数据库中(只需使用提供的安装 .sql 脚本),并且这些函数位于同名模式中。因此,我可以按如下方式使用该函数:

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

如果它默认包含在 SQL Server 中会很好...

【讨论】:

  • 你好。我是SQL# 的创建者,我想提几点:1) 我最近发布了 v 4.0,其中包括许多性能增强,包括 RegEx_CaptureGroup,2) 现在有一个 RegEx_CaptureGroupCapture 函数获取特定组的特定重复,3) 完整版(即不是免费的)包括 TVF RegEx_CaptureGroupsRegEx_CaptureGroupCaptures 以获取字符串中的所有实例, 和 4) 处理 RegEx_CaptureGroup4k
猜你喜欢
  • 2021-08-11
  • 2022-01-08
  • 1970-01-01
  • 1970-01-01
  • 2010-09-29
  • 1970-01-01
  • 2015-07-24
  • 1970-01-01
  • 2022-11-21
相关资源
最近更新 更多