Tach!
1.) Mit folgendem Ausdruck: "/o(.*(]|));/msU" möchte ich alle Parts im $string matchen die mit 'o(' beginnen und bei erstem vorkommen auf '];' oder ');' enden.
Vom ersten Vorkommen sagst Du aber nichts - im Gegenteil. .* grabscht sich so viele Zeichen wie möglich.
U nter U mständen aber nicht.
Wenn Du stattdessen so wenig Zeichen wie möglich grabschen willst, mußt Du das ungreedy machen, also .*? stattdessen benutzen.
Oder mit dem dafür vorgesehenen Modifier.
dedlfix.