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)
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 . –
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