Regex Powershell:通过正则表达式搜索CAP

Regex Powershell:通过正则表达式搜索CAP,regex,powershell,Regex,Powershell,因此,根据我的测试,在寻找CAP时,使用[A-Z]是毫无价值的 这里是交易,我有一个三个字符的字符串 我需要确保这三个字符都是大写字母 我搜索了stackoverflow和web,并尝试了以下方法: PS M:\> 'ADV' -match '[A-Z]{3}' True PS M:\> 'adv' -match '[A-Z]{3}' True PS M:\> 'A' -match '[a-z]' True PS M:\> 'adv' -match '[A-Z]'

因此,根据我的测试,在寻找CAP时,使用
[A-Z]
是毫无价值的

这里是交易,我有一个三个字符的字符串

我需要确保这三个字符都是大写字母

我搜索了stackoverflow和web,并尝试了以下方法:

PS M:\> 'ADV' -match '[A-Z]{3}'
True

PS M:\> 'adv' -match '[A-Z]{3}'
True

PS M:\> 'A' -match '[a-z]'
True

PS M:\> 'adv' -match '[A-Z]'
True

这对我来说毫无意义!为什么肠衣不起作用了?

我最近被它咬了

默认情况下,Powershell将进行不区分大小写的匹配。您需要改用
-cmatch

[PS] > 'A' -cmatch '[a-z]'
False
[PS] > 'adv' -cmatch '[A-Z]{3}'
False

为了恭维arco444的回答,我只想通过引用这种行为的原因来解决建设性批评。虽然这似乎是反直觉的,但对于操作员来说,默认的PowerShell行为仍然是真实的

如果你看,它表明:

默认情况下,所有比较运算符不区分大小写。作出决定 比较运算符区分大小写,在运算符名称前加上“c”


-Match
当然是这些操作符之一。鉴于默认不区分大小写,使用前缀字母“i”似乎是多余的,但根据情况,这可能会让用户更清楚地了解代码的意图。

关闭
i
标志。查看实际的F。他们为什么要这样编程?如果它们都是不区分大小写的搜索,那么使用A-Za-z有什么意义?!对MSBizarre拳打脚踢,不是吗。由于
-imatch
运算符的存在而变得更加奇怪,该运算符明确用于不区分大小写的匹配…尽管如此,感谢您的快速响应!再次感谢!PowerShell基本上是不区分大小写的,不像.NET,这就是为什么下面返回False:[RegEx]::Match(“ABCDEFG”,“a-z]+”)