2015-07-02 2 views
-2

Я пытаюсь получить IP-адрес из строки. Я определенно не первый, кто задал этот вопрос, но я не мог найти ответ, который бы точно делал то, что нам нужно.Regex для извлечения IP-адреса из строки

Если в строке есть какая-либо комбинация xxx.xxx.xxx.xxx, независимо от текста вокруг нее, она должна извлекать это число с точками между ними. Поэтому его можно использовать с Test-Connection.

Я не пытаюсь определить, действителен ли IP-адрес, но я пытаюсь получить IP-адрес из строки. Даже если это недействительно, например, 900.999.800.254.

Пример:

Input    Expected result 
-----    --------------- 
IP_10.57.50.91 10.57.50.91 
10.57.50.73  10.57.50.73 
10.58.4.37 IP  10.58.4.37 
ip 10.63.1.22  10.63.1.22 
BELPRLIXH300  $False 
ip 10.63   $False 

я пытался до сих пор регулярных выражений предположил, here, но они не дают нам IP-адрес в качестве вывода в переменной $Matches.

+0

Спасибо за предложение, но если я пытаюсь '-match 'IP_10.10.22.45'«^ (([0-9] | [1-9] [0-9] | 1 [0 -9] {2} | 2 [0-4] [0-9] | 25 [0-5]) \) {3} ([0-9] |. [1-9] [0-9] | 1 [0-9] {2} | 2 [0-4] [0-9] | 25 [0-5]) $ "' он не работает и дает мне $ False вместо числа. – DarkLite1

+0

Я успешно тестирую каждый IP-адрес с помощью функции ExtractValidIpAddress из вашей ссылки. –

+0

Да, он дает '$ True' или' $ False', но не извлекает номер, который будет использоваться с 'Test-Connection'. – DarkLite1

ответ

4
$ips = @('IP_10.57.50.91', 
    '10.57.50.73', 
    '10.58.4.37 IP', 
    'ip 10.63.1.22', 
    'BELPRLIXH300', 
    'ip 10.63' 
) 

$regex = [regex] "\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b" 

$regex.Matches($ips) | %{ $_.value } 
+0

Только проблема в том, что этот файл не соответствует IP_10.57.50.91'. Он также должен выставить номер '10.57.50.91'. – DarkLite1

+0

удалить первый \ b в регулярном выражении (граница слова) –

+0

Yup, что исправил его. Спасибо, человек, очень ценю вашу помощь :) – DarkLite1

Смежные вопросы