Доброго времени! Такая задача. Есть база данных в ней нужно изменить названия таблиц, полей и прочего таким образом: все заглавные буквы перевести в нижний регистр и расставить "_" перед ними. К примеру, mainUserId=main_user_id sysInterfaceSetup=sys_interface_setup Сделал дамп базы, получился текстовый файлик на 16000 строк. Ручками через редактор колбасить ну очень долго. Пример дампа: Код (Text): -- -- Name: mailAliass_view; Type: VIEW; Schema: public; Owner: pgsql -- CREATE VIEW "mailAliass_view" AS SELECT "mailAliass"."mailAlias" AS alias, ((("main_users"."login")::text || '@'::text) || ("main_domains"."main_domain")::text) AS mail FROM "main_users", "mailAliass", "main_domains" WHERE (("main_domains"."main_domain_id" = "mailAliass"."main_domain_id") AND ("mailAliass"."main_user_id" = "main_users"."main_user_id")); ALTER TABLE public."mailAliass_view" OWNER TO pgsql; -- -- Name: mailDovecotConfigDefaults; Type: TABLE; Schema: public; Owner: pgsql; Tablespace: -- CREATE TABLE "mailDovecotConfigDefaults" ( "mailDovecotConfigDefaultId" bigint NOT NULL, "ConfigChunk" text NOT NULL, "mailDovecotConfigDefault" character varying(255) DEFAULT NULL::character varying NOT NULL, "Position" bigint NOT NULL ); ALTER TABLE public."mailDovecotConfigDefaults" OWNER TO pgsql; -- -- Name: mailDovecotConfig_view; Type: VIEW; Schema: public; Owner: pgsql -- CREATE VIEW "mailDovecotConfig_view" AS SELECT "mailDovecotConfigDefaults"."Position", "mailDovecotConfigDefaults"."ConfigChunk" AS "config_string" FROM "mailDovecotConfigDefaults" ORDER BY "mailDovecotConfigDefaults"."Position"; ALTER TABLE public."mailDovecotConfig_view" OWNER TO pgsql; -- -- Name: mailEximConfigDefaults; Type: TABLE; Schema: public; Owner: pgsql; Tablespace: -- CREATE TABLE "mailEximConfigDefaults" ( "mailConfigDefaultId" bigint NOT NULL, "ConfigChunk" text NOT NULL, "mailConfigDefault" character varying(255) DEFAULT NULL::character varying NOT NULL, "Position" bigint NOT NULL ); Видно, что каждое название будь то название таблицы или поля или функции, или последовательности... заключены в кавычки. Получается нужно найти в тексте слова заключенные в двойные кавычки и затем их изменить как надо. попытался, что то придумать с использованием preg_replace_callback: Код (Text): $result = preg_replace_callback('~(")([^<]+)(")~i', 'my_replace_callback', $text); до функции дело не дошло, так как в неё передается все что идет от первой кавычки текста до последней. У кого есть идеи откликнитесь, регулярные выражения сводят меня с ума
Регулярные выражения всех сводят с ума. /"(.*?)"/is - должно сработать. Можно ещё с ключом U попробовать. Но уверен, с s нормально будет.
PHP: <? function get_all_table_names () { // считать список таблиц из базы и вернуть в массиве... return array ('mailDovecotConfigDefaults', 'mailDovecotConfig_view', 'mailEximConfigDefaults'); } foreach (get_all_table_names () as $table_name) { $new_table_name = preg_replace ('/([A-Z])/e', "'_'.strtolower('\\1')", $table_name); echo "ALTER TABLE $table_name RENAME TO $new_table_name;\n"; } ?>