Regex 要匹配KB文件名的正则表达式
因此,我有一个正则表达式,用于powershell查找Microsoft 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
或检查
文件名通常如下所示:
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