首页 > 解决方案 > Powershell 中格式错误的 \p{X} 字符转义

问题描述

我有一个-match在 PS 脚本中使用的比较语句


$propValue = (Get-ItemProperty "Registry::$($c.Name)" -Name "$($p)")."$($p)"
$productName =  "C:\Program Files (x86)\MyApplication\MyApp"
if ($propValue -match $productName) 
{
      // Do something
}

执行时,脚本会在 Powershell 中引发错误,因为格式错误的 \p{X} 字符转义。这里发生了什么?我该如何解决?

谢谢。

标签: powershellescaping

解决方案


-match是一个正则表达式运算符,\p{X}是一个用于描述 unicode 块的正则表达式转义序列。

这里发生的情况很可能是您有一个字符串值,例如

sometext\p{b8ee6b4b-fefe-4f77-916f-cb8df996599d}

列在注册表中,因此正则表达式引擎将识别该序列并在确定该序列不是有效的 unicode 块描述符p{...}后抛出错误。b8ee6b4b-fefe-4f77-916f-cb8df996599d

在将其用作正则表达式模式之前转义值,$productName它将按您的预期工作:

if ($propValue -match [regex]::Escape($productName)) 
{
      // Do something
}

推荐阅读