web-dev-qa-db-fra.com

RegEx pour une adresse IP

J'essaie d'extraire la valeur (adresse IP) du wan_ip avec ce code source: Qu'est-ce qui ne va pas?! Je suis sûr que le modèle RegEx est correct.

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();
35
h0scHberT

Le [ ne devrait pas être au début de votre modèle. En outre, vous voudrez probablement utiliser Matches(...).

Essayer:

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]); 
41
Bart Kiers

Très vieux message, vous devriez utiliser la solution acceptée, mais envisagez d'utiliser le bon RegEx pour une adresse 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]?)

Si vous voulez éviter les caractères spéciaux après ou avant, vous pouvez utiliser:

^((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]?)$
29
JPBlanc

Essaye ça:

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

Si jamais vous vous trouvez à la recherche d'une expression régulière particulière, http://regexlib.com/ contient de nombreux RegEx au format bibliothèque.

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

Évitez d'utiliser /b - il autorise les caractères avant ou après l'adresse IP.
Par exemple, ...198.192.168.12... était valide.

Utilisez plutôt ^ et $ si vous pouvez diviser l’entrée en morceaux qui isoleraient l’adresse IP.

     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;
     }

Remarque ci-dessus ne validera pas les chiffres, comme indiqué 172 .316 .254.1 était vrai. Cela ne fait que vérifier que le formatage est correct.


UPDATE: Pour valider le formatage et les valeurs, vous pouvez utiliser

     Regex regexIP = new Regex(@"^([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\.([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\.([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\.([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])$");

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

(notez en utilisant ([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5]) pour chaque valeur numérique)
Credit: https://stackoverflow.com/a/10682785/4480932

2
Cordell

Si vous voulez juste vérifier l’adresse IP, utilisez IPAddress.TryParse

using System.Net;

bool isIP(string Host)
{
    IPAddress ip;
    return IPAddress.TryParse(Host, out ip);
}
2
Geograph

Je sais que ce poste n’est pas nouveau, mais j’ai essayé plusieurs des solutions proposées et aucune d’entre elles ne fonctionne aussi bien que celle que j’ai trouvée grâce au lien fourni par Justin Jones. Ils en ont quelques-uns pour l'adresse IP, mais c'est le haut de la liste. Avec LinqPad (I LOVE LinqPad), la plupart des tests que j'ai effectués fonctionnent extrêmement bien. Je recommande d'utiliser celui-ci plutôt que l'une des expressions fournies précédemment:

^(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])$

Donnez un coup de feu dans LinqPad avec ce qui suit:

// \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.");
}

Avec le nouveau RegEx, ce n'est pas valide, ce qui est correct: 355.168.0.1 = No Match, ce qui est correct, comme indiqué dans les commentaires.

J'apprécie tout ajustement car je travaille sur un outil qui utilise l'expression et qui cherche toujours de meilleures façons de le faire.

UPDATE: j'ai créé un projet .NET Fiddle pour fournir un exemple de travail de cette expression, ainsi qu'une liste d'adresses IP testant diverses valeurs. N'hésitez pas à le bricoler et à essayer différentes valeurs pour exercer cette expression et fournir des informations si vous trouvez un cas où l'expression échoue. https://dotnetfiddle.net/JoBXdI

UPDATE 2: Mieux encore, reportez-vous à ce message: Une autre question connexe.

Merci et j'espère que cela aide!

2
Erick Brown

J'ai pris ce modèle de UrlAttribute.cs . à l'espace de noms DataAnnotations. Comme vous le voyez peut-être, je n’ai pris qu’un extrait du motif original.

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])$");
0
Denis

Regex (@ "\ A\d {1,3}.\D {1,3}.\D {1,3}.\D {1,3}\z") essayez avec ceci

0
Adit Kothari

Je pense que vous devez vous débarrasser du [- est-ce un personnage errant ou quoi?

Regex (@ " [\ b\d {1,3}.\D {1,3}.\D {1,3}.\D {1,3}\b")

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

Vérifie ça. Cela devrait fonctionner parfaitement

0
asdfgasdfas

Sembra che tu abbia un estraneo[all'inizio del tuo modèle regex.

0
Justin Morgan