I'm not 100% sure what you want, but this will look for [word1] and [word2] and remove them only if both are on the line:
$line = preg_replace('/word1(.*)word2/', '$1', $line);
This method could match on partial words, and you could be left with extra whitespace. Slightly better would be:
$line = preg_replace('/\s?word1\b(.*)\s?word2\b/', '$1', $line);
This makes sure that they are matched as whole words using word boundaries and spaces. I use spaces on one side so that the extra space is consumed. If you don't care about that just use \b
on both sides of each word.
Second case, moves the first parenthesized phrase to the beginning of the line:
$line = preg_replace('/(.*)(\(.*?\))/', '$2 $1', $line);
Edit:
After seeing your example, I think you want:
$line = preg_replace('/^\[Scene\].*/', '', $line);
$line = preg_replace('/\[\.*?\]\s+(.*)(\[.*?\])/', '$2 $1');
$line = preg_replace('/(.*)\s+(\(.*?\))/', '$2 $1');