我想找出\\mudit.bah.*[ps1|bat]
的正则表达式,这意味着路径可以像\\mudit.bah.xyz123.ps1
或\\mudit.bah.xyz123.bat
xyz123
一样。
我正在使用https://rextester.com/tester并尝试使用它,但是直到\\{2}mudit.bah.
为止我都可以做。我不确定如何使用*
,它可以是带有.(dots)
或不带有.(dots)
的多个字符。
任何帮助都将不胜感激。
答案 0 :(得分:1)
首先,[ps1|bat]
与单个字符p
,s
,1
,b
,a
或{{1 }}。要创建与t
或ps1
匹配的组,您需要一个分组结构bat
或(ps1|bat)
(非捕获组)。
要尽可能多地匹配除换行符以外的任何字符,可以使用(?:ps1|bat)
。要将其限制为除点以外的任何字符,请使用否定的字符类.*
。请注意,[^.]
将匹配0个或多个除点以外的字符,而[^.]*
将匹配1个或多个。
因此,您可以使用此正则表达式来允许[^.]+
和\\mudit.bah.
或ps1
之间的任何字符:
bat
或者,它们之间只能有一个无点部分:
^\\{2}mudit\.bah\..*\.(?:ps1|bat)$
请参见the regex demo。
详细信息
^\\{2}mudit\.bah\.[^.]*\.(?:ps1|bat)$
-字符串的开头^
-两个反斜杠\\{2}
-一个mudit\.bah\.
子字符串mudit.bah.
-除[^.]+\.
之外的任意1个以上的字符,然后是一个点.
-(?:ps1|bat)
或ps1
bat
-字符串的结尾。答案 1 :(得分:0)
进行正则表达式匹配(如您要求的使用)
^ mudit.bah。*。(ps1 | bat)
get-childitem | Where-Object {$_.Name -match "^mudit\.bah.*.(ps1|bat)"}
这将获取以mudit.bah开头的文件。并以ps1或bat结尾。 “ bah”后的。*可以匹配任何字符,包括数字和符号。
要在不使用正则表达式的情况下执行此操作:
Get-ChildItem | Where-Object {($_.Name -like ("mudit.bah." + "*" + ".ps1")) -or ($_.Name -like ("mudit.bah." + "*" + ".bat"))}