指定的通配符模式无效:'*警告:[] *'

时间:2013-12-31 09:19:25

标签: regex string powershell wildcard

我试图检查文本文件是否包含某些字符串。我的所有字符串都存储在一个变量中,我按照以下方式检查文件

ForEach ($word in ($words.split("|"))) {
  if ($word -ne "" -and $word -ne $null) {
    if ($textFile.toLower() -like '*'+$word.toLower()+'*') {
      $contains = $true
    }
  }
}

(单词是一个包含不同字符串的字符串,其中包含一个|)。

这完全有效,除非我的字符串中有[]。当我的字符串中包含[]时,我将收到以下错误: (单词示例:警告:[] |错误:[] |处理路径失败:| FilesWithError:0 | VerboseErrors:<前两个单词出错。

The specified wildcard pattern is not valid: *warnings: []*

1 个答案:

答案 0 :(得分:3)

您需要从$word变量中转义元字符。

这是一种方法:

[Regex]::escape($word.toLower()).replace(']','\]')

我必须致电replace,因为静态方法[Regex]::escape转义的字符非常小,不包含]。没有这个小帮助,最终的正则表达式将是无效的。

注意:我已在 Powershell 2.0 上测试了此代码。