Выражение регулярного выражения, чтобы соответствовать и не соответствовать - PullRequest
0 голосов
/ 05 декабря 2018

Я использую PowerShell и хочу использовать регулярные выражения для сопоставления чего-либо.У меня есть список серверов, которые имеют это соглашение об именах - ABCPPsomename.
Так что, когда регулярное выражение находит PP в имени, я хочу, чтобы оно было включено.

Однако некоторые серверы имеют имя ABCPRODsomenAppame, и совпадение включает в себя эти серверы из-за App в имени.

Мне это нужно, поэтому, если PP в названии, чтобы включить его, и если оно не в имени, пропустите его.Также мне нужно имя сервера ABCPPsomeAppname для включения

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Примечание: в этом ответе показано , как сопоставить с учетом регистра , что оказалось не тем, что хотел ОП.


Звучит таквы хотите сопоставить имена серверов, которые содержат подстроку PP с учетом регистра , так что PP соответствует, но App, например, нет.

Для сопоставления с учетом регистра используйте оператор -cmatch:

PS> 'PPOnly', 'OnlyApp', 'PPandApp', 'Neither' -cmatch 'PP'
PPOnly
PPandApp

Необходима дополнительная работа, если подстрока должна совпадать только в определенной позиции.

Примечание:

  • Приведенная выше команда действует непосредственно на вход массив и возвращает отфильтрованный массив.

  • Если вы хотите выполнить фильтрацию через конвейер , см. Ответ Тео * Where-Object .

0 голосов
/ 05 декабря 2018

ЕСЛИ (большое , если , потому что вы не уверены в этом), все ваши серверы начинают свое имя с буквального текста ABC, тогда да, это не составит труда:

$servers = @('ABCPPsomename', 'ABCPRODsomenAppame', 'ABCPPsomeAppname')
$servers | Where-Object { $_ -match '^ABCPP' }

Результат

ABCPPsomename
ABCPPsomeAppname


ОБНОВЛЕНИЕ
Из вашего последнего комментария я понял, что соглашение о имени сервера должно быть от 3 до максимум 5 символов для началас, за которым следует либо PP, либо что-то совершенно другое, например PROD.

Чтобы найти в списке только "PP" серверов, вы можете попробовать вместо этого:

$servers = 'ABCPPsomename', 'ABCPRODsomenAppame', 'ABCPPsomeAppname'
$servers | Where-Object { $_ -match '^[A-Z]{3,5}PP' }

Результат:

ABCPPsomename
ABCPPsomeAppname

Сведения о регулярном выражении:

^          Assert position at the beginning of the string
[A-Z]      Match a single character in the range between “A” and “Z”
   {3,5}   Between 3 and 5 times, as many times as possible, giving back as needed (greedy)
PP         Match the characters “PP” literally

Если вам нужно, чтобы совпадение учитывало регистр символов, используйте вместо него -cmatch.

Надеюсь, что поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...