регулярное выражение: как выполнить постобработку заменить результат

В моем текстовом редакторе (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? Может быть, рекурсивный?

0

Решение

просто примените эти 4 последовательные замены регулярных выражений к вашим строкам $ txt

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

0

По вопросам рекламы [email protected]