正则表达式 - 如何 select 后面的所有文本(多行)

RegEx - How to select all text in between backes (multiline)

基本上,我想做的是解析一个 *.sql 文件和 select 所有 CREATE TABLE 语句。下面的示例:

-- ----------------------------
-- Table structure for aes_interval
-- ----------------------------
DROP TABLE IF EXISTS `aes_interval`;
CREATE TABLE `aes_interval`  (
  `processcode` bigint(20) NOT NULL,
  `overstaying` int(11) NOT NULL,
  `floating` int(11) NOT NULL,
  PRIMARY KEY (`processcode`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci;

通过 运行 一个正则表达式 select 都在 (...) 之间,我将能够得到如下 output/substringed 文本:

CREATE TABLE `aes_interval`  (
  `processcode` bigint(20) NOT NULL,
  `overstaying` int(11) NOT NULL,
  `floating` int(11) NOT NULL,
  PRIMARY KEY (`processcode`) USING BTREE
)

我试过 CREATE TABLE\w+\((.|\n)*?\) 但只有 returns 下面的输出:

CREATE TABLE `aes_interval`  (
  `processcode` bigint(20)

希望我能在这里找到正确的正则表达式。

假设 CREATE TABLE 语句以分号结束,因此分号直到每个语句结束才出现,那么下面的正则表达式应该有效:

(CREATE TABLE.*?;)

需要注意的是,以上内容需要 运行 在 tool/language 中,点配置为匹配换行符。并且还需要启用多行匹配模式。

Demo

编辑:

我怀疑 lazy dot 在 Sublime Text 上不起作用。如果是这样,那么您可以尝试以下模式:

(CREATE TABLE[^;]*)

您可以在 https://regex101.com/

中尝试 (CREATE TABLE.*?((\(.*?\)).*?)+\))