gpt4 book ai didi

ruby - 替换所有未引用的事件

转载 作者:太空宇宙 更新时间:2023-11-03 16:47:32 24 4
gpt4 key购买 nike

我正在尝试在 Vim 中编写一个正则表达式来替换每次出现的 true't'false'f'在 SQL 文件中。更复杂的是,我不应该替换 truefalse当它们出现在引号内的任何地方时。

我正在使用以下几乎可以工作的正则表达式:

%s/\v^(([^'"]*)|(.*('.*'|".*").*)*)\zs((t)rue|(f)alse)/'\6\7'/
# no qts or even number of qts \6 \7

但有一个小问题:它只替换了一组 true s 和 false每次运行。例如。 (匹配项以粗体突出显示):

INSERT INTO pages VALUES (42, NULL, 'string', true, '', NULL, true, <strong>false</strong>, 1);
INSERT INTO pages VALUES (42, NULL, 'string', true, NULL, true, <strong>false</strong>, 1);
INSERT INTO pages VALUES (42, NULL, <strong>true</strong>, '', NULL, true, false, 1);
INSERT INTO pages VALUES (42, NULL, true, NULL, true, <strong>false</strong>, 1);

我尝试了各种方法,并且搜索了互联网但找不到任何东西,所以我被困住了。这里有知道如何解决这个问题的正则表达式向导吗?

Vim 或 Ruby 解决方案是理想的,但通用解决方案也会有所帮助。

仅供引用:这是用于将远程 PG 数据库拉入本地 SQLite3 数据库的 rake 任务。

最佳答案

使用 Vim substitute 以及负面回顾和负面回顾,并从您当前的尝试中获得一些灵感:

%s/\([\S"']\)\@<!\(\(t\)rue\|\(\(f\)alse\)\)\([\S"']\)\@!/'\3\5'/g

以下内容

INSERT INTO pages VALUES (42, NULL, 'string true', true, '', NULL, true, false, 1);
INSERT INTO pages VALUES (42, NULL, "string false", true, NULL, true, false, 1);
INSERT INTO pages VALUES (42, NULL, true, '', NULL, true, false, 1);
INSERT INTO pages VALUES (42, NULL, true, NULL, true, false, 1);

变成:

INSERT INTO pages VALUES (42, NULL, 'string true', 't', '', NULL, 't', 'f', 1);
INSERT INTO pages VALUES (42, NULL, "string false", 't', NULL, 't', 'f', 1);
INSERT INTO pages VALUES (42, NULL, 't', '', NULL, 't', 'f', 1);
INSERT INTO pages VALUES (42, NULL, 't', NULL, 't', 'f', 1);

关于ruby - 替换所有未引用的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30179845/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com