Проблема
Проблема, с которой я сталкиваюсь, заключается в том, что в прошлом разработчики некоторого кода, над которым я работаю, устанавливают переменные, такие как $ _GET [name] или иногда как $ _GET ['name']. Пытаясь сделать код единообразным, я хочу, чтобы все они были похожи на $ _GET ['name']
Попытка решения
В пользовательском скрипте DreamWeaver я использовал следующее.
dreamweaver.setUpFindReplace({
searchString: "\$(_POST|_SESSION|_GET)\[([^\'][0-9a-zA-Z _]+?[^\'])\]",
replaceString: "$$1['$2']",
searchWhat: "document",
searchSource: true,
useRegularExpressions: true
});
dreamweaver.replaceAll();
Дополнительная информация
Когда я получаю сообщение об ошибке при запуске его из пользовательского сценария, я не получаю его при запуске тех же строк "searchString" и "replaceString" в строке поиска (CTRL + F).
Подсказка поиска с радостью найдет и заменит случаи, когда это происходит.
Прежде чем кто-то потенциально укажет на этот факт - да, я мог бы просто запустить «Поиск приглашения» и сделать это оттуда, но мне все еще нужно запустить собственный сценарий, чтобы запустить остальные 20 или около того параметров поиска и замены.
У вас есть пример конечных результатов где-нибудь?
Конечно да. У меня есть регулярное выражение, используемое в Regex 101 - https://regex101.com/r/bE9kN6/1
В заключение...
Кто-нибудь знает, как остановить проблему непревзойденных скобок? Я пытался какое-то время, и я не могу найти решение, так как нет непревзойденных скобок.
Решение
Спасибо Бобу за выяснение этого. Dreamweaver использует JS regex (который, как я не думал, отличается от PHP, но оказывается, что POSIX - один, perl-regex [или что-то ...]), и литералам нужно экранировать с помощью \\
not \
.
Это сделало окончательную, рабочую функцию;
dreamweaver.setUpFindReplace({
searchString: "\\$(_POST|_SESSION|_GET)\\[([^\'][0-9a-zA-Z _]+?[^\'])\\]",
replaceString: "$$1['$2']",
searchWhat: "document",
searchSource: true,
useRegularExpressions: true
});
dreamweaver.replaceAll();