06-06-2011, 04:41 PM
Les expressions régulières sont souvent longue et à utiliser en dernier recours en PHP.
Faire juste un split par contre suppose que tous les mots ou commandes sont bien séparé par un seul espace (un peu contraignant).
Du coup je serais plutôt pour une solution intermédiaire : (attention, code de tête)
Le preg_split permet ici de faire un split sur une expression régulière et donc fonctionne aussi si on a plusieurs espace, de plus elle n'est utilisé que lorsque l'on a pas vraiment le choix.
Faire juste un split par contre suppose que tous les mots ou commandes sont bien séparé par un seul espace (un peu contraignant).
Du coup je serais plutôt pour une solution intermédiaire : (attention, code de tête)
$message = "/whisper pseudo Mon message qui tue.";
$message = "/y Endive !!!";
$message = "/sell pseudo épée 30 Tu la veux ma grosse épée ?";
// ne pas utiliser d'expression régulière tant que ce n'est pas nécessaire :
if ($message[0] == '/') // Ok, on a peut-être une commande
{
$cmd = strtolower(substr($message, 1, strpos($message, ' '))); // on récupère ce qui suis le / jusqu'au premier espace et en minuscule
$arguments = trim(substr($message, strpos($message, ' ')+1));
switch($cmd)
{
case 'w':
case 'whisper':
$split_arguments = preg_split('/[ \t]+/', $arguments, 2);
$target = $split_arguments[0];
$message = $split_arguments[1];
// ...
break;
case 'y':
case 'yell':
$message = $arguments;
// ...
break;
case 'sell':
$split_arguments = preg_split('/[ \t]+/', $arguments, 4);
$target = $split_arguments[0];
$item = $split_arguments[1];
$price = $split_arguments[2];
$message = $split_arguments[3] ? $split_arguments[3] : '';
// ...
break;
default:
// Commande non reconnue.
break;
}
}
Le preg_split permet ici de faire un split sur une expression régulière et donc fonctionne aussi si on a plusieurs espace, de plus elle n'est utilisé que lorsque l'on a pas vraiment le choix.