You've tagged the question regex, but this may not be the best tool for the job.
You might be better using basic compiler building techniques (i.e. a lexer feeding a simple state machine parser).
Your lexer would identify five tokens: ("[code]", '\n', "[/code]", EOF, :all other strings:) and your state machine looks like:
state token action
------------------------
begin :none: --> out
out [code] OUTPUT(token), --> in
out \n OUTPUT(break), OUTPUT(token)
out * OUTPUT(token)
in [/code] OUTPUT(token), --> out
in * OUTPUT(token)
* EOF --> end
EDIT: I see other poster discussing the possible need for nesting the blocks. This state machine won't handle that. For nesting blocks, use a recursive decent parser (not quite so simple but still easy enough and extensible).
EDIT: Axeman notes that this design excludes the use of "[/code]" in the code. An escape mechanism can be used to beat this. Something like add '\' to your tokens and add:
state token action
------------------------
in \ -->esc-in
esc-in * OUTPUT(token), -->in
out \ -->esc-out
esc-out * OUTPUT(token), -->out
to the state machine.
The usual arguments in favor of machine generated lexers and parsers apply.