PowerShell: вывод регулярного выражения вместо результата - PullRequest
1 голос
/ 14 февраля 2012

Хорошо, давний посетитель, первый пост.

Вместо того, чтобы PowerShell говорил мне, результатом моего Регулярного выражения является «True» или «False», вместо этого я хотел бы получить строку.Я знаю, что есть другие способы сделать это, и у меня уже есть рабочая версия, но я хотел бы использовать регулярные выражения для «извлечения» строки.

Например:

$ipconfig = ipconfig | select-string "IPv4" | select-object -first 1
$ipconfig -match "\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b"

Просто возвращает «True», вместо этого я хотел бы IP-адрес.

Есть ли способ сделать это с помощью регулярных выражений?

Спасибо!

Ответы [ 2 ]

7 голосов
/ 14 февраля 2012

Вы уже получили его, просто нужно бесплатно проверить переменную, которую вы получаете:

$ipconfig = ipconfig | select-string "IPv4" | select-object -first 1
if ($ipconfig -match "\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b") { 
    $matches[0]
}

В качестве альтернативы вы можете использовать объект .NET:

$ipconfig = ipconfig | select-string "IPv4" | select-object -first 1
([regex]"\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b").matches($ipconfig) | % { $_.value }

Наслаждайтесь:)

0 голосов
/ 14 февраля 2012

Использование -replace:

 $ipconfig = ipconfig | select-string "IPv4" | select-object -first 1 
 $ipconfig -replace '.*\b(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\b.*','$1' 
...