Powershell 中格式错误的 \p{X} 字符转义

Malformed \p{X} character escape in Powershell

我在 PS 脚本

中使用 -match 进行比较

$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} 字符转义。 这里发生了什么?我该如何解决这个问题?

谢谢。

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

这里发生的情况很可能是你有一个像

这样的字符串值
sometext\p{b8ee6b4b-fefe-4f77-916f-cb8df996599d}

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

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

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