正则表达式:如何发布流程替换结果

时间:2015-01-15 08:22:59

标签: php regex notepad++ phpstorm jedit

在我的文本编辑器(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风格的正则表达式可以吗?也许是递归的?

2 个答案:

答案 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函数。它完全控制搜索结果,在文本编辑器中是不可能的。辉煌!