2017-08-03 2 views
-1

set result "1 1.1.1.1 \ n2 2.2.2.2 \ n3 3.3.3.3 \ n4 4.4.4.4 \ n5 399.399.1.1" met "Résultat o/p \ n $ result »Comment extraire IP Addr valide correspondant à un port utilisant TCL regex

sortie:

Result o/p 
1 1.1.1.1 
2 2.2.2.2 
3 3.3.3.3 
4 4.4.4.4 

question - Comment extraire Adr IP valide correspondant à un port en utilisant TCL regex-à-dire

User Input - 2 , Expected Output - 2.2.2.2 (Valid IP) 
User Input - 3 , Expected Output - 399.399.1.1 (InValid IP) 
+1

Ne pas utiliser des expressions régulières pour traiter les adresses IP. Utilisez le [package ip] (http://core.tcl.tk/tcllib/doc/trunk/embedded/www/tcllib/files/modules/dns/tcllib_ip.html "IPv4 et manipulation d'adresse IPv6") dans Tcllib à la place . –

+0

Je comprends cela. Cependant, la condition est d'utiliser regex, prendre l'entrée de l'utilisateur = numéro de port, retourner l'adresse IP correspondante avec validation – amsumitd

Répondre

0

Tout d'abord, puisque l'entrée est valide liste, je le "convertir" en un tableau:

% set result "1 1.1.1.1\n2 2.2.2.2\n3 3.3.3.3\n4 4.4.4.4\n5 399.399.1.1" 
% array set results $result 
% parray results 
results(1) = 1.1.1.1 
results(2) = 2.2.2.2 
results(3) = 3.3.3.3 
results(4) = 4.4.4.4 
results(5) = 399.399.1.1 
% set user_input 5 
% puts $results($user_input) 
399.399.1.1 

Puis, en utilisant la suggestion de Peter:

% set fmt {User Input - %d, Expected Output - %s (%s IP)} 
% set user_input 5 
% puts [format $fmt $user_input $results($user_input) [expr {[::ip::version $results($user_input)] > 0 ? "Valid" : "Invalid"}]] 
User Input - 5, Expected Output - 399.399.1.1 (Invalid IP) 
% set user_input 4 
% puts [format $fmt $user_input $results($user_input) [expr {[::ip::version $results($user_input)] > 0 ? "Valid" : "Invalid"}]] 
User Input - 4, Expected Output - 4.4.4.4 (Valid IP) 

En utilisant une expression régulière:

% set re_octet {\m(?:\d\d?|1\d\d|2[0-4]\d|25[0-5])\M} 
% set re_ip "$re_octet\\.$re_octet\\.$re_octet\\.$re_octet" 
% set user_input 5 
% puts [format $fmt $user_input $results($user_input) [expr {[regexp $re_ip $results($user_input)] ? "Valid" : "Invalid"}]] 
User Input - 5, Expected Output - 399.399.1.1 (Invalid IP) 
% set user_input 4 
% puts [format $fmt $user_input $results($user_input) [expr {[regexp $re_ip $results($user_input)] ? "Valid" : "Invalid"}]] 
User Input - 4, Expected Output - 4.4.4.4 (Valid IP)