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();
Ответы
Ответ 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\.]
Проверьте это. Он должен отлично работать