我想使用正则表达式过滤掉一个字符串是否含有"&"或" |"或" ="。我试过了:
$compareRegex = [String]::Join("|", @("&","|", "="));
"mydfa" -match $compareStr
PowerShell打印" True"。这不是我想要的,似乎" |"本身已经混淆了PowerShell的匹配。我该如何解决?
答案 0 :(得分:4)
@Kayasax答案会在这种情况下做(因此+1),只是想建议更一般的解决方案。
首先:您没有使用刚刚创建的模式。我怀疑$compareStr
是$null
,因此它会匹配任何内容。
要点:如果你想创建一个匹配字符/字符串的模式,你无法预测它们中是否包含特殊字符,只需使用[regex]::Escape()
表示你想要的任何项目匹配:
$patternList = "&","|", "=" | ForEach-Object { [regex]::Escape($_) }
$compareRegex = $patternList -join '|'
"mydfa" -match $compareRegex
在这种情况下,输入可以是动态的,您最终不会得到与任何内容匹配的模式。
答案 1 :(得分:3)
|
在正则表达式中具有特殊含义。替代(替代匹配列表)由此字符分隔。例如,表达式
a|b|c
会匹配a
或b
或c
。
为了匹配文字|
,您需要使用反斜杠(\|
)将其转义或将其放在字符类([|]
)中,因此您的表达式应如下所示:< / p>
"mydfa" -match "\||&|="
或者像这样:
"mydfa" -match "[|&=]"