簡體   English   中英

如何使用regex使用PHP從文件中刪除一行?

[英]How can I use regex to remove a line from a file with PHP?

我正在編寫CodeIgniter語言類的擴展,它將從特定文件中刪除特定語言行。 為腳本提供了一個數組鍵,以確定要刪除的文件行。 我不相信我已經正確編寫了正則表達式來檢測配置文件行。 這是cat_names語言文件:

<?php

$lang['cat_123'] = 'Transportation';
$lang['cat_124'] = 'Restaurants';

這是我的語言課擴展:

public function remove_line($line, $file){

    $CI =& get_instance();
    $CI->load->helper('file');

    foreach($this->existing_langs as $lang){

        $lang_contents = read_file($this->lang_path.'/'.$lang.'/'.$file.'_lang.php');

        $new_contents = preg_replace("^$lang\[\$line\] \= (.*?)\\n^", '', $lang_contents);

        write_file($this->lang_path.'/'.$lang.'/'.$file.'_lang.php', 'w+');

    }

}

我使用以下方法來調用從語言文件中刪除行的方法:

$this->lang->remove_line('cat_123', 'cat_names');

為什么我的preg_replace不刪除行? 注意:語言文件不是只讀的。

"^$lang\[\$line\] \= (.*?)\\n^"
"^\\$"."lang\['$line'\] = (.*?)\n^"

您的RegEx無法正常運作,因為:

  • 雙引號字符串中的$lang被解釋為變量(同樣,該變量不存在);
  • 你缺少單引號'方括號內;
  • $line是一個變量,被轉義。

以這種方式更改它:

"^\\$"."lang\['$line'\] = (.*?)\n^"

還要注意, =不需要轉義,轉義$的方式后面是字符。

另外,我建議您使用單引號引起來的字符串,並將定界符設置為另一個字符(在正則表達式中^表示行的開頭。在這里可以使用,但可能會造成混淆)。

這是帶不同分隔符的單引號等效項:

'/\$lang\[\''.$line.'\'\] = (.*?)\n/'

評估演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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