使用Regex

时间:2018-07-19 10:56:58

标签: php regex

我正在尝试提取所有PHP文件中的以下字符串的大量替换内容:

$var->getVar($lc['first_var']['second_var']);

替换为:

$lc['second_var'];

我花了几个小时试图弄清楚,但是我迷路了。

“ second_var”中的变量是动态的,因此相当复杂。有什么想法吗?

我可以使用以下方法获取$lc['first_var']['second_var']

\(([^\)]+)\)

现在,我只需要替换['first_var'],然后返回$lc['second_var']-我在这一阶段的思考过程是忽略['first_var']-这可能吗,那么我有解决方案吗?

1 个答案:

答案 0 :(得分:0)

模式Demo

在记事本++中:

查找内容:string tmg ={" \n" , "//periodic signal intf.KEYCONTROL_CLK \n" , "fork\n" , " begin\n" , " the_clock = 0;\n" , " forever begin\n" , " if(the_clock == 0)\n" , " #(5000000/2 * 1ps);\n" , " else\n" , " #((5000000-5000000/2) * 1ps);\n" , " the_clock=~the_clock;\n" , " end\n" , " end\n" , "join_none\n"}; `uvm_info("record_key_control_map_and_record", $sformatf("Start recording of interface if_record_key_control"), UVM_DEBUG); $fdisplay ( mcd0,tmg);

替换为:\$var->getVar\(\$lc\['[^']*'](\['[^']*'])\)

  • 反斜杠是对正则表达式引擎转义具有特殊含义的字符。
  • \$lc$1是一个否定的字符类,表示“不是单引号的任何字符”。
  • [^']表示零个或多个(尽可能多)。
  • *中的替换表示“捕获组1”-这是第二个变量。

p.s。仅供参考,当$1位于否定的字符类中时(您的尝试),您无需在其中添加斜杠。