凉风

愿此生尽兴,赤诚善良

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

正则表达式最大作用就是搜索与替换,

今天工作中遇到一个棘手的问题,因为需求变动,一张表突然要增加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被正则表达式本身占用)

下面这个括号组一共分为三组

(()())

分组方法:数左括号,从左到右进行分组,有几个左括号就有几组(更复杂的分组情况请查阅相关书籍)

大小写转换:

\L\E:\L\E元字符会将它们之间的大写字母变为小写,\U\E元字符会将它们之间的小写字母变为大写,但是这个好像并不是所有的正则实现都支持,笔者使用的工具为notepad++

首先搜索用正则:

^.*`(\w*)_(\w)(\w*)`.*'(.*)'.*$

反单引号中内容匹配字段名,单引号中内容匹配备注内容,

`AAA_BBB1` varchar(2) DEFAULT NULL COMMENT 'AAABBB1',

用以上正则匹配sql建表语句会分为四组(根据以上介绍的分组内容)

第一组:AAA

第二组:B

第三组:BB1

第四组:AAABBB1

分组之后替换操作会容易很多,只需要注意分组内容放置的位置以及大小写就可以了

替换正则:

    /**\r\n     * $4\r\n     */\r\n    @Column\(name \= "$1_$2$3"\)\r\n    private String \L$1\E$2\L$3\E;\r\n

备注内容:   /**\r\n     * $4\r\n     */\r\n

$4表示将第四组内容放置在此处

字段名:@Column\(name \= "$1_$2$3"\)\r\n

用1,2,3组重组字段名$1_$2$3即为:AAA_BBB1

属性:private String \L$1\E$2\L$3\E;\r\n

\L$1\E$2\L$3\E:将第一组小写,第二组不变,第三组小写拼在一起:aaaBbb1;

\r\n为windows系统下换行符

替换结果如下

    /**
     * AAABBB1
     */
    @Column(name = "AAA_BBB1")
    private String aaaBbb1;

 

posted on 2018-10-23 17:05  凉凉的风  阅读(6736)  评论(0编辑  收藏  举报