Bien qu'une regex puisse facilement faire cela, je ne suis pas sûr que ce soit l'approche la plus directe. C'est probablement le plus court, mais cela ne le rend pas vraiment le plus facile à maintenir.
Au lieu de cela, je vous suggère quelque chose comme ceci:
$x="14:48 say;0ed673079715c343281355c2a1fde843;2;laka;hello ;)";
if (($ts,$rest) = $x =~ /(\d+:\d+)\s+(.*)/)
{
my($command,$hash,$pid,$handle,$quote) = split /;/, $rest, 5;
print join ",", map { "[$_]" } $ts,$command,$hash,$pid,$handle,$quote
}
Il en résulte:
[14:48],[say],[0ed673079715c343281355c2a1fde843],[2],[laka],[hello ;)]
Je pense que cela est juste un peu plus lisible. Non seulement cela, je pense que c'est aussi plus facile à déboguer et à maintenir, parce que c'est plus proche de la façon dont vous le feriez si un humain essayait la même chose avec un stylo et du papier. Brisez la chaîne en morceaux que vous pouvez ensuite analyser plus facilement - demandez à l'ordinateur de faire exactement ce que vous feriez. Quand viendra le temps d'apporter des modifications, je pense que celui-ci ira mieux. YMMV.
C'est génial! Pouvez-vous me dire rapidement la différence entre. *? og. * Merci! :) –
La différence est que. *?s'arrête à la première instance de tout ce qui suit, tandis que. * s'arrête à la dernière instance de ce qui suit. – eyelidlessness
Ah, super amis! Appréciez-le! :-) –