正则表达式最大作用就是搜索与替换,
今天工作中遇到一个棘手的问题,因为需求变动,一张表突然要增加22个字段,这意味着页面字段展示,model类都要跟着增加大量的相似代码,
`AAA_BBB1` varchar(2) DEFAULT NULL COMMENT 'AAABBB1',
`AAA_BBB2` varchar(2) DEFAULT NULL COMMENT 'AAABBB2',
以这两个为例,可以想象当数据量增多时,工作量也会急剧增加,在这里正则表达式可以真正发挥作用,个人感觉正则最大的魅力就在于大批量的搜索与替换,
一两条数据体现不出正则表达式的优势,
以下为笔者参与项目model类中属性的标准定义形式。
/**
* AAABBB1
*/
@Column(name = "AAA_BBB1")
private String aaaBbb1;
/**
* AAABBB2
*/
@Column(name = "AAA_BBB2")
private String aaaBbb2;
如果每个都要复制粘贴是一件十分枯燥,痛苦的事情,而你又找不到合适的代码生成器
这里仅针对String类型数据阐述清楚知识点,多类型替换,暂时还没有发现好的方法,(建议建表时相同类型字段尽量放在一起)
这里需要做的是将sql建表语句中的字段名放到model属性中的name = ""中,将sql建表语句中的注释放到model属性注释中,然后字段名以驼峰式给在String 之后。
主要用到分组与大小写转换
分组:
正则表达式中分组从1开始(分组0被正则表达式本身占用)
下面这个括号组一共分为三组
(()())
分组方法:数左括号,从左到右进行分组,有几个左括号就有几组(更复杂的分组情况请查阅相关书籍)
大小写转换:
LE:LE元字符会将它们之间的大写字母变为小写,UE元字符会将它们之间的小写字母变为大写,但是这个好像并不是所有的正则实现都支持,笔者使用的工具为notepad++
首先搜索用正则:
^.*`(w*)_(w)(w*)`.*'(.*)'.*$
反单引号中内容匹配字段名,单引号中内容匹配备注内容,
`AAA_BBB1` varchar(2) DEFAULT NULL COMMENT 'AAABBB1',
用以上正则匹配sql建表语句会分为四组(根据以上介绍的分组内容)
第一组:AAA
第二组:B
第三组:BB1
第四组:AAABBB1
分组之后替换操作会容易很多,只需要注意分组内容放置的位置以及大小写就可以了
替换正则:
/** * $4 */ @Column(name = "$1_$2$3") private String L$1E$2L$3E;
备注内容: /** * $4 */
$4表示将第四组内容放置在此处
字段名:@Column(name = "$1_$2$3")
用1,2,3组重组字段名$1_$2$3即为:AAA_BBB1
属性:private String L$1E$2L$3E;
L$1E$2L$3E:将第一组小写,第二组不变,第三组小写拼在一起:aaaBbb1;
为windows系统下换行符
替换结果如下
/**
* AAABBB1
*/
@Column(name = "AAA_BBB1")
private String aaaBbb1;