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