Php 如何让preg_replace()删除两个标记之间的文本?

Php 如何让preg_replace()删除两个标记之间的文本?,php,tags,preg-replace,Php,Tags,Preg Replace,我试图在PHP中创建一个函数,可以从一个文件夹及其所有子文件夹中的all.js文件中删除两个标记内的代码。到目前为止,除了preg\u replace()之外,一切正常。这是我的代码: <?php deleteRealtimeTester('test'); function deleteRealtimeTester($folder_path) { foreach (glob($folder_path . '/*.js') as $file) { $st

我试图在PHP中创建一个函数,可以从一个文件夹及其所有子文件夹中的all.js文件中删除两个标记内的代码。到目前为止,除了
preg\u 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;
    }
}

?>
标记包含正斜杠很重要,而且如果文件包含多个标记,则只删除
//realtimesterstart
//realtimesterend
的代码,而不是从
//realtimesterend
//realtimesterstart
的代码


我希望有人能帮助我

我假设
//realtimeterstart
//realtimeterend
和中间的代码在不同的行上?在PCRE中
与换行符不匹配。您需要使用
s
修饰符(并且您不需要
()
,除非您需要捕获的文本进行替换):

另外,查看
GLOB
GLOB\u ONLYDIR
,而不是
array\u filter
。另外,也可能是
文件\u放入内容
而不是
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);
}

我假设
//realtimeterstart
//realtimeterend
和中间的代码在不同的行上?在PCRE中
与换行符不匹配。您需要使用
s
修饰符(并且您不需要
()
,除非您需要捕获的文本进行替换):

另外,查看
GLOB
GLOB\u ONLYDIR
,而不是
array\u filter
。另外,也可能是
文件\u放入内容
而不是
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);
}

我假设
//realtimeterstart
//realtimeterend
和中间的代码在不同的行上?在PCRE中
与换行符不匹配。您需要使用
s
修饰符(并且您不需要
()
,除非您需要捕获的文本进行替换):

另外,查看
GLOB
GLOB\u ONLYDIR
,而不是
array\u filter
。另外,也可能是
文件\u放入内容
而不是
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);
}

我假设
//realtimeterstart
//realtimeterend
和中间的代码在不同的行上?在PCRE中
与换行符不匹配。您需要使用
s
修饰符(并且您不需要
()
,除非您需要捕获的文本进行替换):

另外,查看
GLOB
GLOB\u ONLYDIR
,而不是
array\u filter
。另外,也可能是
文件\u放入内容
而不是
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);
}

您还可以将正则表达式更改为使用[\s\s]字符集,该字符集可用于匹配任何字符,包括换行符

所以有以下几点

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

这将删除//realtimeterstart to//realtimeterend的内容以及标记本身。

您还可以将正则表达式更改为使用[\s\s]字符集,该字符集可用于匹配任何字符,包括换行符

所以有以下几点

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

这将删除//realtimeterstart to//realtimeterend的内容以及标记本身。

您还可以将正则表达式更改为使用[\s\s]字符集,该字符集可用于匹配任何字符,包括换行符

所以有以下几点

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

这将删除//realtimeterstart to//realtimeterend的内容以及标记本身。

您还可以将正则表达式更改为使用[\s\s]字符集,该字符集可用于匹配任何字符,包括换行符

所以有以下几点

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

这将删除//realtimeterstart to//realtimeterend的内容和标记本身。

非常感谢它工作了非常感谢它工作了非常感谢它工作了非常感谢它工作了非常感谢它工作了非常感谢