MENU

IDEA 正则替换的小技巧

June 4, 2021 • Read: 1770 • 教程·折腾

某晚深夜,某人问了个奇怪的问题,select sql 中,怎么快速的用表字段的注释作为列名称???这是什么操作??一时理解不了

细问,是这般操作,存在表 foo_table

CREATE TABLE `foo_table` (
  `id` int(11) NOT NULL COMMENT '主键',
  `name` varchar(20) NOT NULL COMMENT '名字',
  `age` int(2) NOT NULL COMMENT '年龄',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Foo表';

希望查找数据时候,是这样的 sql ,把 comment 作为结果列的名称

select 
  `id` as '主键',
  `name` as '名字',
  `age` as '年龄'
from foo_table

想了一会儿,能不能用正则,只要把 int(11) NOT NULL COMMENT 替换成 as 问题就解决了?

打开IDEA,新建文本,输入

select
  `id` int(11) NOT NULL COMMENT '主键',
  `name` varchar(20) NOT NULL COMMENT '名字',
  `age` int(2) NOT NULL COMMENT '年龄',
from foo_table

希望替换成

select
  `id`  as  '主键',
  `name`  as  '名字',
  `age`  as  '年龄',
from foo_table

CTRL R ,选择 Regex 模式,沉默甚久,想不出怎么找出第二个 ` 到后面第一个 ' 的正则语句。。。
但又想,是否可以分组替换呢?把

`id` int(11) NOT NULL COMMENT '主键',

分成3组:

[`id` ][int(11) NOT NULL COMMENT][ '主键',]

idea 替换的方式可否替换第2组为 as ?

Google后发现,在替换框中,是支持查找框的正则分组的,用 $1 代表组1,含义是的用组1的值替换匹配到的字符。

思路很清晰,只要写出分三组的正则,按照原始顺序,保留第1组及第3组,把第2组替换成 as 即可

分组的正则如下

`id` int(11) NOT NULL COMMENT '主键',
(`\w+`\s+)(.+COMMENT)(\s+'.+')

第1组对应(注意后面有空格):

`id` 

第2组对应(前后没有空格)

int(11) NOT NULL COMMENT

第3组对应(注意前面有空格)

 '主键',

IDEA的查找框输入

(`\w+`\s+)(.+COMMENT)(\s+'.+')

IDEA的替换框输入

$1 as $3

替换输入

替换后结果

选择替换全部,则

select
  `id` int(11) NOT NULL COMMENT '主键',
  `name` varchar(20) NOT NULL COMMENT '名字',
  `age` int(2) NOT NULL COMMENT '年龄',
from foo_table

替换为

select
  `id`  as  '主键',
  `name`  as  '名字',
  `age`  as  '年龄',
from foo_table

参考:

https://stackoverflow.com/questions/34698359/replacing-using-named-capture-groups-in-intellij-idea

https://www.jetbrains.com/help/idea/tutorial-finding-and-replacing-text-using-regular-expressions.html


本文由 ONE 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
如有版权疑问交流,请给我留言:oneisall8955@gmail.com
本文永久链接:https://liuzhicong.cn/index.php/guide/idea-regex-replace-skill.html

Archives QR Code Tip
QR Code for this page
Tipping QR Code
Leave a Comment

2 Comments
  1. 如果仅仅是想实现这种效果Excel中Ctrl+E也可达到

    1. @大龙虾Excel也能这样操作?涨姿势了。近期发现,这种类似小需求,idea的列编辑也很快速达到