正则表达式获取所有SQL表的名称

时间:2015-07-02 18:56:59

标签: mysql sql regex

我有一个CREATE TABLE文档,我需要获取所有表名的列表。这就是我所拥有的:

CREATE TABLE `mturk_reviewqueue` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `catalog_id` int(11) DEFAULT NULL,
  `tv_series_id` int(11) DEFAULT NULL,
  `added_on` datetime NOT NULL,
  `correct_url` varchar(100) DEFAULT NULL,
  `notes` varchar(400) DEFAULT NULL,
  `completed_on` datetime DEFAULT NULL,
  `completed_by_id` int(11) DEFAULT NULL,
  `top_url` varchar(100) DEFAULT NULL,
  `diff_score` decimal(5,2) DEFAULT NULL,
  `ip_checkout` varchar(24) DEFAULT NULL,
  `incorrect_original_url` varchar(100) DEFAULT NULL,
  `fix_notes` varchar(1000) DEFAULT NULL,
  `is_promotional_content` tinyint(1) DEFAULT NULL,
  `contains_multiple_titles` tinyint(1) DEFAULT NULL,
  `is_garbage_series` tinyint(1) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `completed_by` (`completed_by_id`),
  KEY `catalog_id` (`catalog_id`),
  KEY `tv_series_id` (`tv_series_id`),
  CONSTRAINT `mturk_reviewqueue_ibfk_1` FOREIGN KEY (`completed_by_id`) REFERENCES `auth_user` (`id`),
  CONSTRAINT `mturk_reviewqueue_ibfk_2` FOREIGN KEY (`catalog_id`) REFERENCES `main_catalog` (`id`),
  CONSTRAINT `mturk_reviewqueue_ibfk_3` FOREIGN KEY (`tv_series_id`) REFERENCES `main_tvseriesinstance` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=196089 DEFAULT CHARSET=utf8;

-- Create syntax for TABLE 'mturk_worker'
CREATE TABLE `mturk_worker` (
  `worker_id` varchar(22) NOT NULL DEFAULT '',
  `notes` varchar(100) NOT NULL,

...等...

这就是我需要的:

mturk_reviewqueue
mturk_worker
etc...

到目前为止,我有:

r'CREATE\sTABLE\s`(.+)`\s\('

这让我得到了表名,但我似乎无法摆脱表名后的所有垃圾,但在下一个之前。什么是最好的正则表达式呢?

4 个答案:

答案 0 :(得分:2)

r'CREATE\sTABLE\s`(.+?)`'

这应该为你做。

答案 1 :(得分:1)

如果您喜欢命令行选项。假设您的sql文件名为" foo":

cat foo | grep 'CREATE TABLE' | cut -d\` -f2

这适用于MacOS。

答案 2 :(得分:0)

这也应该有用(即使单词之间应该有多个空格)......

/CREATE\s+TABLE\s+`([^`]+)`/g

答案 3 :(得分:0)

如果您正在使用ack,则可以执行此操作:

ack 'CREATE TABLE `(.+)`' --output='$1'