用于文件路径的Powershell正则表达式

时间:2019-02-16 17:53:52

标签: regex powershell

我想找出\\mudit.bah.*[ps1|bat]的正则表达式,这意味着路径可以像\\mudit.bah.xyz123.ps1\\mudit.bah.xyz123.bat xyz123一样。 我正在使用https://rextester.com/tester并尝试使用它,但是直到\\{2}mudit.bah.为止我都可以做。我不确定如何使用*,它可以是带有.(dots)或不带有.(dots)的多个字符。 任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:1)

首先,[ps1|bat]与单个字符ps1ba或{{1 }}。要创建与tps1匹配的组,您需要一个分组结构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"))}