在Powershell中演员[正则表达式]导致区分大小写的陌生感 - 为什么?

时间:2013-07-26 22:12:08

标签: regex powershell

我是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

这是怎么回事?什么是[正则表达式]正在做什么,导致区分大小写?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

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

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