因此,基于我使用[A-Z]
的测试在寻找上限时毫无价值。
所以这是交易,我有一个包含三个字符的字符串。
我需要确保所有这三个字符都是大写字母。
我搜索了stackoverflow和网络并尝试了这个:
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
这对我没有意义!套管为什么不工作?
答案 0 :(得分:2)
最近我被自己咬了。
默认情况下,Powershell会执行不区分大小写的匹配。您需要使用-cmatch
代替:
[PS] > 'A' -cmatch '[a-z]'
False
[PS] > 'adv' -cmatch '[A-Z]{3}'
False
答案 1 :(得分:0)
为了赞美arco444的回答,我只是想通过引用这种行为的原因来解决建设性的批评。虽然它似乎反直觉,但仍然适用于运营商的默认PowerShell行为。
如果你看About_Comparison_Operators,它就说明了:
默认情况下,所有比较运算符不区分大小写。做一个 比较运算符区分大小写,在运算符名称前加上" c"。
-Match
当然是其中一个运营商。在假设不区分大小写的情况下,使用前缀字母" i"似乎是多余的,但根据情况,这可以使用户更清楚代码的意图。