我正在尝试在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
的代码。
我希望有人能帮助我。
您还可以更改正则表达式以使用[''s''s]字符集,该字符集可用于匹配任何字符,包括换行符。
以下也是如此
preg_replace('#'/'/RealtimeTesterStart['s'S]+'/'/RealtimeTesterEnd#', '', $string);
这将删除//RealtimeTesterStart到//RealtimeTesterEnd的内容以及标记本身。
我假设//RealtimeTesterStart
、//RealtimeTesterEnd
和中间的代码在不同的行上?在PCRE中,.
与换行符不匹配。您需要使用s
修饰符(并且您不需要()
,除非您需要捕获的文本进行替换):
#//RealtimeTesterStart.*?//RealtimeTesterEnd#s
另外,对于glob
而不是array_filter
,请查看GLOB_ONLYDIR
。此外,也可能是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);
}