【问题标题】:Identifying text that does NOT contain a character识别不包含字符的文本
【发布时间】:2023-01-19 01:52:27
【问题描述】:

如何找到 -NOT- 后跟 .dbo 的 ADB 数据库?

我认为使用 [^d] 会找到不具有 d 的字符串,但它似乎不起作用。

PS C:\> 'FROM [ADB].[dbo].[ATABLE] T' | Select-String -Pattern '\[*ADB\]*\.\[*[^d]'

FROM [ADB].[dbo].[ATABLE] T

PS C:\> $PSVersionTable.PSVersion.ToString()
7.3.1

【问题讨论】:

  • 可选的 [ 最终匹配条件“not a d”。将两者都变成负面的前瞻:'\[*ADB\]*\.(?!\[*d)'

标签: sql-server regex powershell


【解决方案1】:

由于Select-String 有开关-NotMatch,直接的解决方案是创建一个匹配[ADB].[dbo] 的正则表达式,然后用所述开关反转结果。此外,[regex] 类型加速器提供对 escape() 的访问,这将简化添加反斜杠的工作。像这样,

$tests = 'FROM [ADB].[dbo].[ATABLE] T', 'FROM [ADB].[sys].[ATABLE] T', 'FROM [ADB].[DBO].[ATABLE] T'  

$pattern = [regex]::escape('[ADB].[dbo].')
foreach($t in $tests) {
  select-string -NotMatch -pattern $pattern -InputObject $t
}

# output
FROM [ADB].[sys].[ATABLE] T

请注意,输出默认不区分大小写。如果需要,请像这样使用适当的开关,

foreach($t in $tests) {
  select-string -NotMatch -pattern $pattern -InputObject $t -casesensitive
}
# output
FROM [ADB].[sys].[ATABLE] T
FROM [ADB].[DBO].[ATABLE] T

【讨论】:

    猜你喜欢
    • 2020-02-19
    • 2011-05-26
    • 2017-03-17
    • 1970-01-01
    • 1970-01-01
    • 2020-08-22
    • 2015-04-21
    • 1970-01-01
    • 2021-12-18
    相关资源
    最近更新 更多