如何使用PowerShell匹配运算符

时间:2016-02-25 14:43:56

标签: regex powershell powershell-v2.0

版本:PowerShell 2.0

我有以下内容:

$pattern = '^.\d_\d\d\d\d\d\d\d\d_\d\d\d\d\d\d\d\d\d\d\d\d\d\d.pdf$'
$filename = '123456_12345678_12345678901234.pdf'
$filename -match $pattern

我希望^和$字符开始和结束字符串。因为我正在使用外卡'。'在开始时,我真的只关心$终结者。这些字符似乎不像我在PowerShell中所期望的那样工作,因为上面的代码返回FALSE。

$ goodname会返回什么模式,但$ badname会返回false。名称第一段中的位数未知。

$goodname = '123456_12345678_12345678901234.pdf'
$badname = '123456_12345678_12345678901234.pdf.hold'

1 个答案:

答案 0 :(得分:3)

它返回false,因为filenamepattern不匹配。

更好的正则表达式是:

$pattern = '^\d+_\d{8}_\d{14}\.pdf$'
$filename = '123456_12345678_12345678901234.pdf'
$filename -match '\d{6}_\d{8}_\d{14}\.pdf.*'

说明

  • ^字符串的开头
  • \d+匹配至少一位数字(正如您所说的数字位数未知)
  • _匹配下划线
  • \d{8}匹配8位数字
  • _匹配下划线
  • \d{14}匹配14位数字
  • \.匹配点.
  • pdf匹配" pdf"
  • $如果您现在不在字符串的末尾,请不要匹配。