我如何匹配" |"在PowerShell中的正则表达式?

时间:2015-07-02 05:44:03

标签: powershell comparison

我想使用正则表达式过滤掉一个字符串是否含有"&"或" |"或" ="。我试过了:

$compareRegex = [String]::Join("|", @("&","|", "="));
"mydfa" -match $compareStr

PowerShell打印" True"。这不是我想要的,似乎" |"本身已经混淆了PowerShell的匹配。我该如何解决?

2 个答案:

答案 0 :(得分:4)

@Kayasax答案会在这种情况下做(因此+1),只是想建议更一般的解决方案。

首先:您没有使用刚刚创建的模式。我怀疑$compareStr$null,因此它会匹配任何内容。

要点:如果你想创建一个匹配字符/字符串的模式,你无法预测它们中是否包含特殊字符,只需使用[regex]::Escape()表示你想要的任何项目匹配:

$patternList = "&","|", "=" | ForEach-Object { [regex]::Escape($_) }
$compareRegex = $patternList -join '|'
"mydfa" -match $compareRegex

在这种情况下,输入可以是动态的,您最终不会得到与任何内容匹配的模式。

答案 1 :(得分:3)

|在正则表达式中具有特殊含义。替代(替代匹配列表)由此字符分隔。例如,表达式

a|b|c

会匹配abc

为了匹配文字|,您需要使用反斜杠(\|)将其转义或将其放在字符类([|])中,因此您的表达式应如下所示:< / p>

"mydfa" -match "\||&|="

或者像这样:

"mydfa" -match "[|&=]"