我在PowerShell中匹配包含管道字符的字符串时遇到困难。匹配在以下情况下返回true,不应该:
> "Debug|x86" -match "Debug|x128"
True
我已尝试转义匹配参数管道符,但这不会改变意外结果,例如:
> "Debug|x86" -match "Debug`|x128"
True
答案 0 :(得分:8)
如果您不确定需要转义哪些字符,请让Escape方法为您完成工作:
PS > [regex]::escape("Debug|x128")
Debug\|x128
答案 1 :(得分:5)
这是一个正则表达式,因此需要使用反斜杠进行转义,而不是PowerShell的反引号,例如:
> "Debug|x86" -match "Debug\|x128"
False
由于它是正则表达式,如果管道字符未转义,则计算结果为“Debug或x128”。
答案 2 :(得分:1)
Chibacity和Shay都揭示了逃避正则表达式中元字符的正确方法。但是,如果您想了解有关-match运算符和其他字符串比较运算符的更多信息,您可能会发现本文有用: Harnessing PowerShell's String Comparison and List-Filtering Features。它配有一个单页挂图,用于枚举标量和数组上下文中的各种运算符。这是一个预览: