Сопоставление строк PowerShell и символ вертикальной черты

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

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

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

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

person Tim Lloyd    schedule 21.08.2011    source источник


Ответы (3)


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

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

Debug\|x128
person Shay Levy    schedule 21.08.2011

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

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

Поскольку это регулярное выражение, если символ вертикальной черты не экранирован, он оценивается как «Отладка или x128».

person Tim Lloyd    schedule 21.08.2011

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

person Michael Sorens    schedule 22.08.2011