2010-09-17 5 views
1

J'ai besoin de trouver des adresses IP internes en utilisant une regex, j'ai réussi à le faire, mais dans les cas suivants tous les 4 correspond. J'ai besoin d'une regex qui ne correspond pas à la première mais qui correspond à la suivante 3. Chaque ligne est une entrée différente.Aide précise regex de détection IP

! "version 10.2.0.4.0 detected" 
+ "version 10.2.0.42 detected" 
+ "version 10.2.0.4 detected" 
+ "version 10.2.0.4" 

modifier: mon regex actuel est

(?-i)\b10\.2.(?:[0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b 

Toutes les idées?

Répondre

1

Je pense @ la réponse de wrikken était correcte, mais il était dans les commentaires de l'un des postes supprimés:

Ici, il est:

(?<![0-9]\.)((?: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]?)(?!\.[0-9]) 
+0

Le point important est (?! \. [0-9]) à la fin. – dereli

0

Utilisez selon regex que vous voulez faire correspondre l'adresse IP (ou l'autre des deux travaux ci-dessus pour vos scénarios), et utiliser (?:^|\s+) au début et (?:\s+|$) à la fin pour vous assurer qu'il ya des espaces ou rien autour de la valeur.

  • (?:) définit un groupe qui ne rend pas compte de son contenu
  • ^ est le début d'une ligne/chaîne et $ est la fin d'une ligne \ chaîne
  • \s+ est un ou plusieurs caractères d'espacement
  • |
  • est l'opérateur de l'alternance, soit une ou l'autre option de part et d'autre de la |

Utilisation de votre expression comme point de départ, vous vous retrouvez avec

(?-i)(?:^|\s+)10\.2.(?:[0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(?:\s+|$) 
+0

Ne pas oublier la citation pour le dernier. –

+0

Je supposais que cela signifiait la fin de la chaîne, plutôt qu'une citation littérale ... – bdukes

+0

merci, mais ce dont j'avais besoin était "(?! \. [0-9])" à la fin avant "\ b" – dereli

2

En PCRE:

/\b((1?[1-9]?[0-9])|(2[0-4][0-9])|(25[0-5]))(\.((1?[1-9]?[0-9])|(2[0-4][0-9])|(25[0-5]))){3}\b/ 

C'est plutôt une correspondance stricte, ne permettant pas de multiples zéros, donc 00.00.00.00 est invalide (0.0.0.0 est).

+0

+1 pour une réponse plus complète - cela devrait fonctionner dans .net (comme requis par la question) si vous supprimez les barres obliques de début et de fin. –

+0

Eh bien les barres obliques font partie de PCRE, j'utilise toujours PCRE pour montrer Regex. – polemon

+1

@polemon: Oui, mais la question indique explicitement que .NET est le moteur qu'il utilise. –