0

我是 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] 在做什么,导致区分大小写?

4

2 回答 2

3

[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
于 2013-07-26T22:22:13.350 回答
1

默认情况下,$array -match调用不区分大小写。

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

于 2013-07-26T22:22:31.813 回答