Search code examples
phpregexnotepad++phpstormjedit

regexp: how to postprocess replace result


In my text editor (phpStorm, notepad++, jedit, ect.) I have strings like:

....    $this->request_json['store-user-id'] .....
....    $this->request_json['deviceID'] ....

I need to replace them to:

$this->request->store_user_id
$this->request->device_id

i.e.

search: \-\>request_json\[\"([\w_\-]+)\"\]
replace: ->request->$1

BUT: I need additional inline substitution "-" -> "_", transformation to lower case and preceding every capital letter with "_".

Is that possible using perl-style regex? Maybe recursive?


Solution

  • Finally solved the problem in 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);
    

    It's the most powerful solution. I'm a little lost touch with php these days, but I'm very surprised that nobody pointed to this php function. It gives full control over the search result, impossible in text editors. Brilliant!