【问题标题】:Why are tagged expressions not found in SQL Server Management Studio?为什么在 SQL Server Management Studio 中找不到标记表达式?
【发布时间】:2020-09-04 00:53:14
【问题描述】:

我从阅读中了解到,大括号表示 SQL Server Management Studio (SSMS) 中的“查找”中的标记表达式,其中“使用正则表达式”已打开。反斜杠 n 是替换中匹配文本的占位符。即使在我进行替换之前,我也无法找到工作。例如这段文字:

这个

还有这个“查找”正则表达式模式:

{[a-z]*}

我得到“未找到以下指定文本”。如果我删除大括号,则 find 会按预期对这两个词中的每一个词产生影响。我究竟做错了什么?这是 SSMS v18.5。

【问题讨论】:

  • 大括号 ({}) 不是 REGEX 模式匹配中的特殊字符。表达式 {[a-z]*} 将匹配一组大括号,它们之间有 0 个或多个纯字母字符。例如{this}{that}{}regex101
  • 不过,有些正则表达式的风格很挑剔,试试\{[A-Za-z]*\}
  • 谢谢你们。虽然我已经用查找来表述问题,但最终我需要一个功能正常的查找替换。如果没有我的特殊需求的全部细节,假设我想以“那个这个”结尾,以“这个那个”开头。
  • 我知道我的替换子句可能是“ \2 \1 ”,大括号括起匹配 \n 从左到右从 1 开始计数的项目。 docs.microsoft.com/en-us/sql/ssms/scripting/… 引导我使用大括号(搜索“标记”)。我尝试使用圆括号以防文档过期,但是当我尝试替换 \2\1 时这不起作用。
  • @Larnu 在旧版本的 SSMS 中,括号特殊的 RegEx 语法。他们允许将匹配用于替换为\1\2 等,其中括号也可以进行分组,但不适用于\number 替换模式。请在下面查看我的答案。

标签: sql-server regex replace ssms


【解决方案1】:

问题是您正在尝试使用与旧版本的 SSMS 一起消失的过时语法(即“标记表达式”)。我不确定它何时切换,但我有一个带有 SQL Server 2008 R2 的测试系统,以及它附带的 SSMS 版本,它使用旧式 SSMS 正则表达式语法(我认为是专有的,因为我从未见过在其他任何地方使用过。

SSMS 现在使用 .NET 正则表达式及其语法。您可以通过确保光标在查询编辑器中并点击 CTRL + F 来判断您的类型。如果搜索框(附在查询编辑器的右上角)弹出(并且“查找”输入字段未标记为 ),那么您使用的是现代版本的 SSMS以及 .NET 正则表达式。相反,如果弹出“查找和替换”窗口(并且输入字段标记为“查找内容:”),那么您使用的是旧版本的 SSMS 及其“特殊”版本的正则表达式。

示例

开始于:

this that


one two three four five

并使用(旧语法 - 标记表达式):

查找内容: {[a-z]+} {[a-z]+}
替换为: ~\2~\1~

结果:

~that~this~


~two~one~ ~four~three~ five

对于较新版本的 SSMS,使用(较新的语法 - 捕获组):

查找: ([a-z]+) ([a-z]+)
替换: ~$2~$1~

使用相同的起始文本会产生完全相同的结果。

信息

在旧版本中,“查找”/“替换”字段右侧有一个箭头按钮,可显示常用语法的快速列表,底部选项是文档链接。

在较新的版本中,“查找”和“替换”(技术上它们实际上是“快速查找”和“快速替换”)对话框没有任何帮助按钮。 但是,如果您转到“编辑”菜单,然后转到“查找和替换 ➧”,您将看到“在文件中查找”和“在文件中替换”选项。这两个选项将打开一个窗口,该窗口基本上是旧版本的“查找和替换”窗口,略有更新,但仍标题为“查找和替换”。这个“查找和替换”窗口在“查找”和“替换”字段的右侧有帮助按钮,这两个字段都有一个“正则表达式帮助”选项,可将您带到正确的 RegEx 文档(链接如下)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-11
    • 2012-01-08
    • 1970-01-01
    • 2010-09-28
    相关资源
    最近更新 更多