Regex 要匹配KB文件名的正则表达式

Regex 要匹配KB文件名的正则表达式,regex,windows,powershell,Regex,Windows,Powershell,因此,我有一个正则表达式,用于powershell查找Microsoft kb文件。它做得很好,但我也在尝试实现一种或检查 文件名通常如下所示: blahblah-kb123456-x86.exe blahblah-kb1234567-x86.exe blahblah-kb123456-v2-x86.exe blahblah-kb1234567-v2-x86.exe 我的正则表达式如下所示: blahblah-kb123456-x86.exe blahblah-kb1234567-x86.ex

因此,我有一个正则表达式,用于powershell查找Microsoft kb文件。它做得很好,但我也在尝试实现一种
检查

文件名通常如下所示:

blahblah-kb123456-x86.exe
blahblah-kb1234567-x86.exe
blahblah-kb123456-v2-x86.exe
blahblah-kb1234567-v2-x86.exe
我的正则表达式如下所示:

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,1}
    是一种冗长的说法
  • 可选的子模式需要放在括号中,以使其成为原子模式
  • 您可以使用不区分大小写的标志,而不是像
    [kK]
    那样指定每个字母
  • 你可以说
    [0-9]{6,7}
    ,但你知道永远不会有一个KB数超过7位吗?更好的是
    [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
你犯了一些小错误

  • -
    不需要转义
  • {0,1}
    是一种冗长的说法
  • 可选的子模式需要放在括号中,以使其成为原子模式
  • 您可以使用不区分大小写的标志,而不是像
    [kK]
    那样指定每个字母
  • 你可以说
    [0-9]{6,7}
    ,但你知道永远不会有一个KB数超过7位吗?更好的是
    [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
你犯了一些小错误

  • -
    不需要转义
  • {0,1}
    是一种冗长的说法
  • 可选的子模式需要放在括号中,以使其成为原子模式
  • 您可以使用不区分大小写的标志,而不是像
    [kK]
    那样指定每个字母
  • 你可以说
    [0-9]{6,7}
    ,但你知道永远不会有一个KB数超过7位吗?更好的是
    [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
你犯了一些小错误

  • -
    不需要转义
  • {0,1}
    是一种冗长的说法
  • 可选的子模式需要放在括号中,以使其成为原子模式
  • 您可以使用不区分大小写的标志,而不是像
    [kK]
    那样指定每个字母
  • 你可以说
    [0-9]{6,7}
    ,但你知道永远不会有一个KB数超过7位吗?更好的是
    [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

目前,您的正则表达式与任何示例名称都不匹配。@Tomalak很抱歉,它与。。。我只是忘了在我意识到这些名字可能还有其他信息之前告诉他们。不过,正则表达式的问题需要特别精确。就目前情况而言,正则表达式与所有示例名称都匹配。;-)默认情况下,Powershell正则表达式不区分大小写,因此这是相同的,但作为@Tomalak,您的正则表达式匹配所有示例。^+\-kb\d{6,7}-?v?\d?-x\d+。目前,您的正则表达式与任何示例名称都不匹配。@Tomalak很抱歉,它与。。。我只是忘了在我意识到这些名字可能还有其他信息之前告诉他们。不过,正则表达式的问题需要特别精确。就目前情况而言,正则表达式与所有示例名称都匹配。;-)默认情况下,Powershell正则表达式不区分大小写,因此这是相同的,但作为@Tomalak,您的正则表达式匹配所有示例。^+\-kb\d{6,7}-?v?\d?-x\d+。目前,您的正则表达式与任何示例名称都不匹配。@Tomalak很抱歉,它与。。。我只是忘了在我意识到这些名字可能还有其他信息之前告诉他们。不过,正则表达式的问题需要特别精确。就目前情况而言,正则表达式与所有示例名称都匹配。;-)默认情况下,Powershell正则表达式不区分大小写,因此这是相同的,但作为@Tomalak,您的正则表达式匹配所有示例。^+\-kb\d{6,7}-?v?\d?-x\d+。目前,您的正则表达式与任何示例名称都不匹配。@Tomalak很抱歉,它与。。。我只是忘了在我意识到这些名字可能还有其他信息之前告诉他们。不过,正则表达式的问题需要特别精确。就目前情况而言,正则表达式与所有示例名称都匹配。;-)默认情况下,Powershell正则表达式不区分大小写,因此这是相同的,但作为@Tomalak,您的正则表达式匹配所有示例。^+\-kb\d{6,7}-?v?\d?-x\d+。你的第二点提到
{0,1}
是一种冗长的说法
,但是你如何使用这种语法指定
n
匹配数?我不确定你的意思
{0,1}
的意思是“零次出现或恰好出现一次”,这就是
的意思-它是同一事物的简写。这里不涉及
n
。您的第二点谈到
{0,1}
是一种冗长的说法
,但是如何使用此语法指定
n
匹配数?我不确定您的意思
{0,1}
表示“零次出现或恰好出现一次”,这就是
的意思-这是一个shor