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

regexp: how to postprocess replace result

在我的文本编辑器(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->

但是:我需要额外的内联替换“-”->“_”,转换为小写字母并在每个大写字母前加上“_”。

是否可以使用 perl 风格的正则表达式?也许递归?

只需在您的 $txt 字符串上应用这 4 个连续的正则表达式替换

$txt =~ s/_json\[\'/->/;
$txt =~ s/']//;
$txt =~ s/([a-z])([A-Z])/_/g;
$txt =~ tr/[A-Z]/[a-z]/;

终于解决了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 函数。它可以完全控制搜索结果,这在文本编辑器中是不可能的。太棒了!