Регулярное выражение для извлечения определенных столбцов из операторов SQL CREATE TABLE - PullRequest
0 голосов
/ 26 ноября 2018

Допустим, у меня есть дамп MySQL, который создает много таблиц.

Пример:

CREATE TABLE `my_table` (
  `id` bigint(20) NOT NULL,
  `REVTYPE` tinyint(4) DEFAULT NULL
  `some_other_column` varchar(255)
);

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

  • Все строки, начинающиеся с «CREATE TABLE» и содержащие «my_» в имени таблицы
  • Затем извлекая строку, содержащую «tinyint»

Таким образом, результат будет выглядеть так:

CREATE TABLE `my_table` (
  `REVTYPE` tinyint(4) DEFAULT NULL

1 Ответ

0 голосов
/ 27 ноября 2018

Это регулярное выражение работает:

^((CREATE.*my_.*\n)|(\s+.*tinyint.*\n)|(\s+.*(?!tinyint)\n))


CREATE TABLE `my_table` (
  `id` bigint(20) NOT NULL,
  `id` bigint(22) NOT NULL,
  `REVTYPE` tinyint(4) DEFAULT NULL,
  `id` bigint(20) NOT NULL,
  `REVTYPE` tinyint(5) DEFAULT NULL,
  `some_other_column` varchar(255)
);

становится (замените на $2$3):

CREATE TABLE `my_table` (
  `REVTYPE` tinyint(4) DEFAULT NULL,
  `REVTYPE` tinyint(5) DEFAULT NULL,
);

[Я полагаю, что ОП хочет в конце ); -посоветуйте если не верно.Смотрите regex101 ссылку :

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...