正则表达式匹配KB文件名

时间:2013-10-22 11:21:15

标签: regex windows powershell

所以我有一个正则表达式,我正在使用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'

这与上述条件不符。关于如何改进它的任何想法?

1 个答案:

答案 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$

http://rubular.com/r/Lj1Vm1XYkt