среда, 13 ноября 2019 г.

REGEXP: найти строки с повторением паттерна

Рефакторю код по экспорту в ХМЛ
Код добавляет в ХМЛ ноды

$login->addChild('login_date', $dat['login_date']);
$login->addChild('mac', $dat['mac']);
$login->addChild('access_point', $dat['access_point']);

//и ещё строк 10-15 в том же ключе

Внутренний перфекционист кричит, что 15 одинаковых строк - это #говнокод и надо это заменить на

foreach ($dat as $key => $value) {
$login->addChild($key, $value);
}
Правда всегда есть риск, что некто злонамеренный (папиредники) сделал какую-то херню в духе
$login->addChild('mac', $dat['mac_address']);
и тогда всё в огне

Руками эту муть перебирать лень да и если попадется что вроде "cpdId", то точно пропустишь

И нас спасает regexp при чем простой как двери
~('.+?').+\1~
который подсветит всем строки в которых есть
'.+?' - символы в кавычках
.+ - потом какие-то ещё символы --
\1 - а потом то, что было найдено в первой группе в скобках
Но мы немного усложним задачу и проверим точно ли везде простое присваивание выражение приобретает вид 
('.+?'), \$dat\[\1
и мы видим
что а) в одном месте у нас обработка спецсимволов б) в остальных местах имя поля на входе и выходе совпадает

* - в последнем варианте нет ~~ потом что мы используем регулярное выражение в поиске ИДЕ, а не собственно в коде

Комментариев нет:

Отправить комментарий