В моем текстовом редакторе (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? Может быть, рекурсивный?
просто примените эти 4 последовательные замены регулярных выражений к вашим строкам $ txt
$txt =~ s/_json\[\'/->/;
$txt =~ s/']//;
$txt =~ s/([a-z])([A-Z])/\1_\2/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. Это дает полный контроль над результатом поиска, что невозможно в текстовых редакторах. Brilliant!