Подтвердить что ты не робот

RegEx для IP-адреса

Я пытаюсь извлечь значение (IP-адрес) wan_ip с помощью этого исходного кода: Что не так?! Я уверен, что шаблон RegEx верен.

String input = @"var product_pic_fn=;var firmware_ver='20.02.024';var wan_ip='92.75.120.206';if (parent.location.href != window.location.href)";
Regex ip = new Regex(@"[\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b");
string[] result = ip.Split(input);

foreach (string bla in result)  
{
  Console.WriteLine(bla);                
}

Console.Read();
4b9b3361

Ответ 1

[ не должен находиться в начале вашего шаблона. Кроме того, вы, вероятно, захотите использовать Matches(...).

Try:

String input = @"var product_pic_fn=;var firmware_ver='20.02.024';var wan_ip='92.75.120.206';if (parent.location.href != window.location.href)";
Regex ip = new Regex(@"\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b");
MatchCollection result = ip.Matches(input);
Console.WriteLine(result[0]); 

Ответ 2

Очень старая статья, вы должны использовать принятое решение, но подумайте о том, чтобы использовать правильный RegEx для адреса IPV4:

((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]?)

Ответ 3

Попробуйте следующее:

 Match match = Regex.Match(input, @"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}");
 if (match.Success)
 {
     Console.WriteLine(match.Value);
 }

Ответ 4

Если вы когда-либо находите поиск определенного регулярного выражения, http://regexlib.com/ имеет много RegEx в формате библиотеки.

Ответ 5

Regex.IsMatch(input, @"^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$")

Ответ 6

Я знаю, что этот пост не нов, но я пробовал несколько предлагаемых решений, и никто из них не работает так же хорошо, как тот, который я нашел благодаря ссылке, предоставленной Джастином Джонсом. У них довольно много для IP-адреса, но это верхняя часть списка и с помощью LinqPad (I LOVE LinqPad) большинство тестов, которые я выбрал, работают очень хорошо. Я рекомендую использовать это, а не любое из предыдущих предоставленных выражений:

^(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])$

Сделайте снимок в LinqPad со следующим:

// \b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b  355.168.0.1 = 355.168.0.1 (Not Correct)
// ((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]?) 355.168.0.1 = 55.168.0.1 (Not correct)
// \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}  355.168.0.1 = 355.168.0.1 (Not Correct)
// ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$  355.168.0.1 = 355.168.0.1 (Not Correct)
// ^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$  355.168.0.1 = 355.168.0.1 (Not Correct)
// ^(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])$  355.168.0.1 = No Match (Correct)

Match match = Regex.Match("355.168.0.1", @"^(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])$");
if (match.Success) {
    Console.WriteLine(match.Value);
}
else {
    Console.WriteLine("No match.");
}

С новым RegEx это неверно: 355.168.0.1 = Нет соответствия, которое верно, как указано в комментариях.

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

UPDATE. Я создал проект .NET Fiddle, чтобы предоставить рабочий пример этого выражения вместе со списком IP-адресов, которые проверяют различные значения. Не стесняйтесь возиться с ним и пробовать различные значения для осуществления этого выражения и предоставлять любой ввод, если вы найдете случай, когда выражение терпит неудачу. https://dotnetfiddle.net/JoBXdI

ОБНОВЛЕНИЕ 2. Еще лучше обратитесь к этому сообщению: Другой связанный вопрос.

Спасибо, и я надеюсь, что это поможет!

Ответ 7

Я бы рекомендовал избегать начала и окончания с помощью /b - я попробовал это и смог добавить символы до или после IP, например ...198.192.168.12... был действителен Вместо этого используйте ^ и $.

     Regex regexIP = new Regex(@"^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$");

     if (regexIP.Match(textBoxIP.Text).Success){
         String myIP = textBoxIP.Text;
     }

Ответ 8

Я думаю, вам нужно избавиться от [- это что-то странное или что?

Regex (@ " [\Ъ\д {1,3}.\Д {1,3}.\Д {1,3}.\Д {1,3}\Ъ" )

Ответ 9

В начале вашего шаблона регулярного выражения появляется внешнее [.

Ответ 10

Regex (@ "\ A\d {1,3}.\d {1,3}.\d {1,3}.\d {1,3}\z" ) попробуйте с этим

Ответ 11

Я взял этот шаблон из UrlAttribute.cs. в пространстве имен DataAnnotations. Как вы можете видеть, я взял только часть исходного шаблона из источника.

Regex.IsMatch(input, @"^(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-
9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-
9]\d|1\d\d|2[0-4]\d|25[0-5])$");

Ответ 12

(\d{1,3}\.){3}(\d{1,3})[^\d\.] 

Проверьте это. Он должен отлично работать