Obwohl ein Regex dies leicht tun kann, bin ich mir nicht sicher, ob es der einfachste Ansatz ist. Es ist wahrscheinlich der kürzeste, aber das macht es nicht wirklich am besten.
Stattdessen würde ich so etwas wie dies vorschlagen:
$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
}
Daraus ergibt sich:
[14:48],[say],[0ed673079715c343281355c2a1fde843],[2],[laka],[hello ;)]
Ich denke, das ist nur ein bisschen besser lesbar. Nicht nur das, ich denke, es ist auch einfacher zu debuggen und zu warten, denn das ist näher an der Art und Weise, wie Sie es tun würden, wenn ein Mensch dasselbe mit Stift und Papier versuchen würde. Zerlegen Sie die Zeichenfolge in Blöcke, die Sie dann einfacher parsen können - lassen Sie den Computer genau das tun, was Sie tun würden. Wenn es an der Zeit ist, Änderungen vorzunehmen, denke ich, dass es besser wird. YMMV.
Das ist großartig! Kannst du mir schnell den Unterschied sagen? og. * Danke! :) –
Der Unterschied ist das. *?stoppt bei der ersten Instanz von was auch immer folgt, während. * stoppt bei der letzten Instanz von was auch immer folgt. – eyelidlessness
Ah, tolle Leute! Bin dankbar! :-) –