Sup!
Hierbei solltest Du angeben, daß die Zeichen zwischen den ; keine ; sein dürfen. Im Moment läßt Du alles zu, weswegen der Ausruck bei mehr als drei ; nicht funktionieren würde.
$_ =~ /[1]+;([^;]+);[^;]/;
So kreigst Du immer den zweiten Abschnitt, da auch noch der Anfang gesetzt ist und es kann nach dem 3. Abschnitt noch mehr kommen.
Nach meiner Interpretation matcht mein Ausdruck
$_ =~ /.*?;(.*?);.*/;
auch immer den zweiten Abschnitt.
Zuerst wird non-greedy alles gematcht bis zum ersten Semikolon (darum müssen Semikola nicht ausgeschlossen werden, denn .*? kann auch *gar nichts* matchen.
Dann wird non-greedy gematcht bis zum zweiten Semikolon (also der zweite Abschnitt) und wegen der Klammern in $1 gespeichert, das letzte .* matcht dann greedy den Rest.
Gruesse,
Bio
Keep your friends close, but your enemies closer!
^; ↩︎