在我的文本编辑器(phpStorm,notepad ++,jedit等)中,我有类似的字符串:
.... $this->request_json['store-user-id'] .....
.... $this->request_json['deviceID'] ....
我需要将它们替换为:
$this->request->store_user_id
$this->request->device_id
即。
search: \-\>request_json\[\"([\w_\-]+)\"\]
replace: ->request->$1
但是:我需要额外的内联替换“ - ” - > “_”,转换为小写,并在每个大写字母前加上“_”。
使用perl风格的正则表达式可以吗?也许是递归的?
答案 0 :(得分:0)
只需在你的$ txt字符串
上应用这4个连续的正则表达式替换$txt =~ s/_json\[\'/->/;
$txt =~ s/']//;
$txt =~ s/([a-z])([A-Z])/\1_\2/g;
$txt =~ tr/[A-Z]/[a-z]/;
答案 1 :(得分:0)
最后解决了php中的问题:
$fstr = implode("", file("file_with_text_to_replace.php"));
$rfstr = preg_replace_callback("/\\-\\>request_json\\[(?:\\\"|\\')([\\w_\\-]+)(?:\\\"|\\')\\]/",
function ($matches)
{
//any post-processing
return "->request->" . str_replace("-","_", $matches[1]);
},
$fstr);
这是最强大的解决方案。这些天我对php有点失落,但是我很惊讶没有人指出这个php函数。它完全控制搜索结果,在文本编辑器中是不可能的。辉煌!