in reply to Matching delimiters

perldoc -q matching delimiters is your friend.

Alternatively, since 5.10 came out today, you can use scary regex features:

s/\\caption(\{((?:[^\{\}]|(?1))*)\})/<caption>$2<\/caption>/;