如何搜索圆括号内的特定内容并将其放入组中?

How to search for specific content inside round bracktes and put it into a group?

我想更新大约 3000 个 sql 脚本,其中我有这个

ALTER TABLE `database_name`.`table_name` 
ADD INDEX `index_name` (`column_name` ASC); /* or DESC */

或这个

ALTER TABLE `database_name`.`table_name` ADD INDEX `index_name` (`column_name` ASC); /* or DESC */

我正在使用 Notepad++ 并想用一个过程替换这两种情况。首先,这是我迄今为止尝试找到这两种情况的方法

ALTER TABLE `?(.*)`?.`?(.*)`? ADD INDEX `?(.*)`? \([^\),]+\);

目前我遗漏了多行的情况。我不确定在哪里检查多行,在 ADD 之前添加 \n 时不会有任何命中。

程序将永远

CALL my_proc('database_name', 'table_name', 'column_name', 'index_name');

这是我到目前为止尝试替换它的方法

CALL my_proc(, , ..., );

不幸的是,我不知道 ... 使用的正确模式我基本上想说:只从圆括号内的内容中提取列名。

我如何修改我的搜索正则表达式以处理多行并将 column_name 放入第四组以便我可以使用这个

CALL my_proc(, , , );

根据你的工作,你可以试试:

ALTER TABLE `?([^.`]+)`?.`?([^.`]+)`?(?: | ?\n| ?\r\n)ADD INDEX `?([^.`]+)`? \(`?([^.`]+)`.*\);

并替换为:

CALL my_proc\(``, ``, ``, ``\);

关于正则表达式的解释:

`?([^.`]+)`?

表示:

  • 零个或一个反引号
  • 除了 . 或反引号之外的任何其他捕获组一次或无限次
  • 零个或一个反引号

然后是.然后是相同的模式

  • (?: | ?\n| ?\r\n) 表示非捕获组,带有 space 或零或一个 space 后跟 Unix 换行符或零或一个 space 后跟 Windows 换行
  • 等等

替换说明:括号必须转义,并且根据您所做的,必须手动添加反引号

示例:https://regex101.com/r/QKPYsX/3