1

我正在将一些 BDD 迁移到新结构,我需要对结构进行一些更改。为此,我首先使用插入命令进行备份,并使用 sublimetext2 和RegReplace创建一些脚本来调整插入。

我遇到的问题是当我需要删除列的值之一并且某些数据是可以在多行中的文本并且我有多个插入时。

我正在使用这个正则表达式:

(.*table.*VALUES \(.*,)(.*,)(([\s\S]*,){12})(.*;)
    Replace by: \1\3\5

这是数据:

INSERT INTO table (cola, colb, colc, cold, cole, colf, colg, colg, colh, coli, colj, colk, coll, colm, coln, colo, colp, colq, colr, cols, colt, culu) VALUES (1, '2', 3, NULL, '5', 6, '7', '8', 9, NULL, NULL, 12, '13', '14', '15', '16', '17', '18', '19', 20, '21', 22');
INSERT INTO table (cola, colb, colc, cold, cole, colf, colg, colg, colh, coli, colj, colk, coll, colm, coln, colo, colp, colq, colr, cols, colt, culu) VALUES (1, '2', 3, NULL, '5', 6, '7', '8', 9, NULL, NULL, 12, '13', '14', ' 

                              15

                            ', '16', '17', '18', '19', 20, '21', '22');

如果我只使用一行正则表达式,它将消除列号9,但是当我在 sublimetext2 中对其进行编码或同时输入两行或更多行时,它将不起作用,因为它不会将两个 INSERT INTO 语句分开。

这是不起作用的示例

谢谢你的帮助 :)

4

1 回答 1

0

您是否尝试使用不贪婪的量词:

(.*?table.*?VALUES \((?:[\s\S]*?,){14})([\s\S]*?,)(([\s\S]*?,)*?)(.*?;)

(如果你想用 regex101 测试它,不要忘记添加 g 修饰符)

注意:

使用 RegReplace,您可以将 greedy 设置为 false 并删除所有问号。

RegReplace 支持 dotall 修饰符,因此您可以替换[\s\S].添加(?s)之前

带有 2 个通知的示例:

(?s)(.*table.*VALUES \((?:.*,){14})(.*,)((.*,)*)(.*;)
于 2013-06-01T00:02:06.593 回答