Как получить preg_replace () для удаления текста между двумя тегами?

Я пытаюсь создать функцию в PHP, которая может удалять код в двух тегах из всех файлов .js в одной папке и всех ее подпапок. Пока все работает кроме preg_replace(), Это мой код:

<?php

deleteRealtimeTester('test');

function deleteRealtimeTester($folder_path)
{
foreach (glob($folder_path . '/*.js') as $file)
{
$string = file_get_contents($file);

$string = preg_replace('#//RealtimeTesterStart(.*?)//RealtimeTesterEnd#', 'test2', $string);

$file_open = fopen($file, 'wb');
fwrite($file_open, $string);
fclose($file_open);
}

$subfolders = array_filter(glob($folder_path . '/*'), 'is_dir');

if (sizeof($subfolders) > 0)
{
for ($i = 0; $i < sizeof($subfolders); $i++)
{
echo $subfolders[$i];
deleteRealtimeTester($subfolders[$i]);
}
}
else
{
return;
}
}

?>

Как уже упоминалось, я хочу удалить все внутри этих тегов и самих тегов:

//RealtimeTesterStart

//RealtimeTesterEnd

Важно, чтобы теги содержали прямую косую черту, а также, что если файл содержит несколько таких тегов, то только код из //RealtimeTesterStart в //RealtimeTesterEnd удаляется а не из //RealtimeTesterEnd в //RealtimeTesterStart,

Я надеюсь, что кто-то может мне помочь.

0

Решение

Я предполагаю что //RealtimeTesterStart, //RealtimeTesterEnd и код между ними на разных строках? В PCRE . НЕ соответствует символам новой строки. Вам нужно использовать s модификатор (и вам не нужно () если вам не нужен захваченный текст для замены):

#//RealtimeTesterStart.*?//RealtimeTesterEnd#s

Кроме того, посмотрите на GLOB_ONLYDIR за glob вместо array_filter, Кроме того, также, возможно, file_put_contents вместо fopen и т.п.

Может быть что-то вроде:

foreach (glob($folder_path . '/*.js') as $file) {
$string = file_get_contents($file);
$string = preg_replace('#//RealtimeTesterStart.*?//RealtimeTesterEnd#s', 'test2', $string);
file_put_contents($file, $string);
}

foreach(glob($folder_path . '/*', GLOB_ONLYDIR) as $subfolder) {
deleteRealtimeTester($subfolder);
}
1

Другие решения

Вы также можете изменить свое регулярное выражение, чтобы использовать набор символов [\ s \ S], который можно использовать для соответствия любому символу, включая разрывы строк.

Итак, имейте следующее

preg_replace('#\/\/RealtimeTesterStart[\s\S]+\/\/RealtimeTesterEnd#', '', $string);

Это приведет к удалению содержимого // RealtimeTesterStart to // RealtimeTesterEnd и самих тегов.

2

По вопросам рекламы [email protected]