簡體   English   中英

如何獲取preg_replace()刪除兩個標簽之間的文本?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM