0

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

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

4

1 回答 1

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$

分解为

^ # 字符串开头
.+ # 任何东西,至少一个字符
- # 一种 ”-”
kb[0-9]{6,} # "kb" 至少 6 位
- # 一种 ”-”
(?: # 非捕获组的开始
  v[0-9]+ # "v" 和一些数字
  - # 一种 ”-”
)? # 组结束,可选
x[0-9]+ # "x" 和一些数字
\.exe # ".exe"
$ # 字符串结尾

要使正则表达式内联不区分大小写,请使用(?i)(这是 .NET 正则表达式引擎的一个功能,但其他引擎也支持)。

(?i)^.+-kb[0-9]{6,}-(?:v[0-9]+-)?x[0-9]+\.exe$

http://rubular.com/r/Lj1Vm1XYkt

于 2013-10-22T11:44:37.540 回答