我正在编写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删除了这些行?注意:语言文件不是只读的。
答案 0 :(得分:1)
"^$lang\[\$line\] \= (.*?)\\n^"
"^\\$"."lang\['$line'\] = (.*?)\n^"
您的RegEx不起作用,因为:
$lang
被解释为变量(此外,此变量不存在); '
; $line
是一个变量,已被转义。以这种方式改变它:
"^\\$"."lang\['$line'\] = (.*?)\n^"
另请注意,=
不需要转义,转义方法$
后跟字符。
另外,我建议你使用单引号字符串并将分隔符设置为另一个字符(在正则表达式中^
表示行的开头。这里有效,但可能会令人困惑)。
这是具有不同分隔符的单引号:
'/\$lang\[\''.$line.'\'\] = (.*?)\n/'
的 eval.in demo 强>