所以根据我的测试,在寻找大写字母时,使用[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
这对我来说毫无意义!为什么外壳不工作?
最近自己被这个咬了。
默认情况下,Powershell 将执行不区分大小写的匹配。您需要改用-cmatch
:
[PS] > 'A' -cmatch '[a-z]'
False
[PS] > 'adv' -cmatch '[A-Z]{3}'
False
只是为了赞美arco444的回答,我只是想通过引用这种行为的原因来解决建设性的批评。虽然它看起来确实相反,但它仍然忠于操作员的默认PowerShell行为。
如果你看一下About_Comparison_Operators它指出:
默认情况下,所有比较运算符都不区分大小写。要制作一个 比较运算符区分大小写,运算符名称前面加上"C"。
-Match
当然是这些运营商之一。鉴于默认为不区分大小写,使用前缀字母"i"似乎是多余的,但根据情况,这可能会使用户更清楚地了解代码的意图。