Соответствие строк PowerShell и символ трубы - PullRequest
2 голосов
/ 21 августа 2011

У меня проблемы со сравнением строк в PowerShell, содержащих символы канала. Match возвращает true в следующем сценарии, если не должно:

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

Я пытался экранировать символ конвейера аргумента соответствия, но это не меняет неожиданный результат, например:

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

Ответы [ 3 ]

8 голосов
/ 21 августа 2011

Если вы не уверены, какие символы вам нужно экранировать, пусть метод Escape сделает всю работу за вас:

5 голосов
/ 21 августа 2011

Это регулярное выражение, поэтому его необходимо экранировать с помощью обратной косой черты, а не обратного слота в PowerShell, например:

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

Поскольку это регулярное выражение, если символ канала не экранирован, он оценивается как «Debugили x 128 ".

1 голос
/ 22 августа 2011

И Chibacity, и Shay раскрыли правильный способ избежать метасимвола в вашем регулярном выражении.Но если вы хотите больше узнать об операторе -match и других операторах сравнения строк, вам может пригодиться эта статья: Использование функций сравнения строк и фильтрации списка в PowerShell .Он поставляется в комплекте с одностраничной настенной диаграммой, перечисляющей различные операторы как в скалярном, так и в массивном контексте.Вот предварительный просмотр: enter image description here

...