[英]How to get preg_replace() to delete text between two tags?
我試圖在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_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);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.