Я не на 100% уверен, что вы хотите, но при этом будут искать [word1] и [word2] и удалять их, только если оба находятся в строке:
$line = preg_replace('/word1(.*)word2/', '$1', $line);
Этот метод может соответствовать частичным словам, и у вас могут остаться лишние пробелы. Чуть лучше было бы:
$line = preg_replace('/\s?word1\b(.*)\s?word2\b/', '$1', $line);
Это гарантирует, что они сопоставляются как целые слова, используя границы слов и пробелы. Я использую пробелы на одной стороне, так что дополнительное пространство используется. Если вас это не волнует, просто используйте \b
с обеих сторон каждого слова.
Второй случай, перемещает первую фразу в скобках в начало строки:
$line = preg_replace('/(.*)(\(.*?\))/', '$2 $1', $line);
Изменить:
После просмотра вашего примера, я думаю, вы хотите:
$line = preg_replace('/^\[Scene\].*/', '', $line);
$line = preg_replace('/\[\.*?\]\s+(.*)(\[.*?\])/', '$2 $1');
$line = preg_replace('/(.*)\s+(\(.*?\))/', '$2 $1');