donglei2288 2015-01-15 08:22
浏览 31
已采纳

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

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?

  • 写回答

2条回答 默认 最新

  • douyou3619 2015-01-15 10:50
    关注

    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!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?