Как насчет этого?
$di = new DirectoryIterator($inputpath);
foreach ($di as $file) {
if ($file->isFile() && $file->isReadable()) {
$namePart = '';
if (preg_match('/\((.*)\)/', $file->getFilename(), $namePart) === false) {
continue;
}
$content = file_get_contents($file->getPathname());
$content = str_replace('<body>', '<body><test>' . $namePart[1] . '</test>', $content);
file_put_contents($file->getPathname(), $content);
$newFilename = str_replace($namePart[0], '', $file->getPathname());
rename($file->getPathname(), $newFilename);
}
}
Проходит все файлы в $inputpath
Если файл является файлом и доступен для чтения, он пытается найти соответствие через регулярное выражение. Результат в $namePart
должен быть равен ['(Far)', 'Far']
(в вашем примере).
Затем он вставляет имя в файл. Я знаю, что использовал тупую функцию; но он делает то, что вы просили.
После вставки строки в файл изменяется имя файла.