2014-12-04 35 views
0

所以基於我的測試使用[A-Z]在尋找帽子時毫無價值。Powershell:通過正則表達式尋找帽子

所以這裏的交易,我有一個字符串與三個字符。

我需要確保所有這三個字符都是大寫字母。

我搜索計算器和網站,並試圖此:

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 

這是沒有意義的我!爲什麼不是套管工作?

+1

關閉'i'標誌。參見http://regex101.com/r/yR3mM3/56 – vks 2014-12-04 15:37:36

回答

2

最近被自己咬傷了。

默認情況下,Powershell將執行不區分大小寫的匹配。您需要使用-cmatch代替:

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

什麼是實際F.爲什麼他們會這樣編程?如果使用A-Za-z,如果它們都是不區分大小寫的搜索,那麼它有什麼意義? *在MS *拳頭* – 2014-12-04 15:45:01

+0

奇怪是不是。通過明確區分大小寫匹配的'-imatch'運算符的存在使其變得更加陌生... – arco444 2014-12-04 15:57:35

+0

儘管感謝快速響應!再次感謝! – 2014-12-04 16:01:27

0

只是恭維arco444的答案,我只是想通過引用這種行爲的原因,解決的建設性的批評。雖然它看起來反直覺,但它仍然忠於運營商的默認PowerShell行爲。

如果你看看About_Comparison_Operators它指出:

默認情況下,所有比較運營商是不區分大小寫。若要使 比較運算符區分大小寫,請在運算符名稱前加上「c」。

-Match當然是這些運營商之一。使用前綴字母「i」似乎是多餘的,因爲默認情況下不區分大小寫,但根據情況,這可以使用戶更清楚地瞭解代碼的意圖。