所以我有一个正则表达式,我正在使用powershell来查找Microsoft kb文件。它做得很好,但我也试图实现一种or
检查。
文件名通常如下所示:
blahblah-kb123456-x86.exe
blahblah-kb1234567-x86.exe
blahblah-kb123456-v2-x86.exe
blahblah-kb1234567-v2-x86.exe
我的正则表达式如下:
'^.+\-[kK][bB][0-9]{6,7}\-{0,1}[vV]{0,1}[0-9]{0,1}\-[xX][0-9]+.exe'
这与上述条件不符。关于如何改进它的任何想法?
答案 0 :(得分:3)
你犯了一些小错误。
-
不需要转义。{0,1}
是一种冗长的说法?
。[kK]
那样指定每个字母。[0-9]{6,7}
,但是你知道永远不会有超过7位数的KB数字吗?更好的是[0-9]{6,}
。.exe
但您的意思是\.exe
。$
。将此应用于您的表达式,您将获得
^.+-kb[0-9]{6,}-(?:v[0-9]+-)?x[0-9]+\.exe$
以
分解^ # start-of-string .+ # anything, at least one character - # a "-" kb[0-9]{6,} # "kb" and at least 6 digits - # a "-" (?: # start of non-capturing group v[0-9]+ # "v" and some digits - # a "-" )? # end of group, make optional x[0-9]+ # "x" and some digits \.exe # ".exe" $ # end-of-string
要使正则表达式不区分大小写,请使用(?i)
(这是.NET正则表达式引擎的一项功能,但也受其他引擎的支持)。
(?i)^.+-kb[0-9]{6,}-(?:v[0-9]+-)?x[0-9]+\.exe$