Php 如何让preg_replace()删除两个标记之间的文本?
我试图在PHP中创建一个函数,可以从一个文件夹及其所有子文件夹中的all.js文件中删除两个标记内的代码。到目前为止,除了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
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的内容和标记本身。非常感谢它工作了非常感谢它工作了非常感谢它工作了非常感谢它工作了非常感谢它工作了非常感谢