【问题标题】:Cast [regex] in PowerShell results in case sensitivity strangeness - why?在 PowerShell 中强制转换 [regex] 会导致区分大小写异常 - 为什么?
【发布时间】:2021-06-18 23:13:05
【问题描述】:

我是 PowerShell 脚本的新手,我对遇到的一些行为感到困惑。

我一直在关注示例来学习如何使用匹配,并且看到了一些将 [regex] 放在字符串前面的示例。我曾假设(可能是错误的)这是一个强制转换,明确指定该对象是一个正则表达式。但似乎使用 [regex] 改变了结果匹配的大小写敏感性:

PS > $array = 'ABC','DEF','GHI'
PS > $array -match 'DEF'
DEF
PS > $array -match 'def'
DEF
PS > $array -match [regex]'def'
PS > $array -match [regex]'DEF'
DEF

这里到底发生了什么? [regex] 在做什么,导致区分大小写?

【问题讨论】:

    标签: regex powershell


    【解决方案1】:

    [regex]'def' 将字符串转换为 Regex 对象,默认情况下区分大小写。另一方面,PowerShell 正则表达式默认不区分大小写。

    PS C:\> ('def').GetType()
    
    IsPublic IsSerial Name                                     BaseType
    -------- -------- ----                                     --------
    True     True     String                                   System.Object
    
    
    PS C:\> ([regex]'def').GetType()
    
    IsPublic IsSerial Name                                     BaseType
    -------- -------- ----                                     --------
    True     True     Regex                                    System.Object

    【讨论】:

    • 为什么是[regex] 而不是[Regex]
    • 好的,它是一个“type accelerator”(.NET 框架类的别名)。在这种情况下,regex(小写)是 .NET 类 System.Text.RegularExpressions.Regex 的别名。
    【解决方案2】:

    $array -match 调用默认不区分大小写。

    添加[regex] 关键字会启动正则表达式搜索,并且正则表达式默认区分大小写。就是这样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-10
      • 1970-01-01
      • 2021-02-27
      • 1970-01-01
      • 2011-11-17
      • 2021-12-19
      • 2012-10-01
      相关资源
      最近更新 更多