2011-08-21 56 views
2

我很難在PowerShell中匹配包含管道字符的字符串。比賽在下列情況下返回true,當它不應該:PowerShell字符串匹配和管道字符

> "Debug|x86" -match "Debug|x128" 
True 

我試圖逃避比賽的說法豎線,但這並不改變意想不到的結果,如:

> "Debug|x86" -match "Debug`|x128" 
True 

回答

5

這是正則表達式所以需要用反斜槓進行轉義,而不是PowerShell的反引號,例如:

> "Debug|x86" -match "Debug\|x128" 
False 

由於它是一個正則表達式,如果管道字符沒能逃脫,其值爲「Debug或X128" 。

8

如果你不知道你需要逃避的字符,讓逃生方法爲你做的工作:

PS > [regex]::escape("Debug|x128") 

Debug\|x128 
+0

+1好答案。 –

1

兩個Chibacity和吉文都透露了適當的方式來逃避的元字符你的正則表達式。但是,如果您想了解更多關於-match運算符和其他字符串比較運算符的信息,您可能會發現這篇文章有用: Harnessing PowerShell's String Comparison and List-Filtering Features。它包含一個頁面掛圖,枚舉標量和數組上下文中的各種運算符。這裏有一個預覽: enter image description here