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
}
我在 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
}