Le espressioni regolari sono state sempre state un lato oscuro della programmazione che con cui non mi sono mai cimentato prima d’ora, ma devo dire che sono uno strumento veramente potente.
Ho deciso di condividere con voi questa bella espressione regolare per la validazione di un indirizzo Samba, utilizzando preg_metch in PHP
Un indirizzo Samba e’ composto essenzialmente da tre parti:
//SERVER_NAME/SHARED_NAME/file_name.jpg
per la validazione e per estrarne le componenti si puo utilizzare questa espressione regolare:
/[\/]{2}(?P<servername>[\w]+)[\/](?P<sharedname>[\w]+)[\/](?P<filename>[\w\/.]+)/
In linguaggio umanamente comprensibile:
Fra parentesi () trovate i match ovvero le parti variabili dello schema a cui ho dato un nome (vedremo perche’) ?P<servername> seguito dalla classe di caratteri che vi possono essere inclusi (\w = significa ogni carattere maiuscolo e minuscolo inclusi i numeri e il trattino basso) ripetuto una o piu’ volte +
Fra parentesi [] ci sono i le classi che delimitano le corrispondenze [\/]{2} significa esattamente due slash.
Tradotta l’espressione suonerebbe come: esattamente due slash [\/]{2} seguito da qualcosa composto da piu’ caratteri e numeri [\w]+ che chiameremo ?P<servername> , poi uno slash [\/] seguito da qualcosa composto da piu’ caratteri e numeri [\w]+ che
chiameremo ?P<sharedname> poi uno slash [\/] seguito da qualcosa composto da piu’ caratteri , numeri slash e punti [\w\/.] che chiameremo ?P<filename>
In php :$uri = "//SERVER_NAME/SHARED_NAME/file_name.jpg";
$success = preg_match("/[\/\/]{2}(?P<servername>[\w]+)[\/](?P<sharedname>[\w]+)[\/](?P<filename>[\w\/.-]+)/", $uri, $matches);
questo ritornera’ $succeess se il match e’ stato esatto e un array cosi composto:
$matches = Array
(
[0] => //PAES2005LAP42/EB3_SPOOL/28_F_F/Rep36_1.jpg
[server] => PAES2005LAP42
[1] => PAES2005LAP42
[shared] => EB3_SPOOL
[2] => EB3_SPOOL
[filename] => 28_F_F/Rep36_1.jpg
[3] => 28_F_F/Rep36_1.jpg
)
per opprofondimenti preg_match