• 请不要在回答技术问题时复制粘贴 AI 生成的内容
javasharp
V2EX  ›  程序员

正则替换的使用

  •  
  •   javasharp · Aug 20, 2015 · 2856 views
    This topic created in 3950 days ago, the information mentioned may be changed or developed.
    如何将驼峰式的注解字段通过正则替换成下划线的字段,而不影响到其他的驼峰式命名的方法或变量?
    eg:
    @Column (name="lastUpdateDate")//如何替换成 @Column (name="LAST_UPDATE_DATE")
    public Date getLastUpdateDate (){
    return lastUpdateDate;
    }
    5 replies    2015-08-22 23:08:29 +08:00
    flowfire
        1
    flowfire  
       Aug 20, 2015
    断言。。。。吧
    joyeblue
        2
    joyeblue  
       Aug 20, 2015
    这个一个针对例子的可用 perl 正则。
    $subject =~ s/(@Column\s+\(name=")([a-z]+)?([A-Z][a-z]+)?([A-Z][a-z]+)?"\)/$1\U$2_\U$3_\U$3"\)/g;

    当然 name 中的注解单词可能会有长有短,如果有 4 个单词的话继续添加([A-Z][a-z]+)?然后在替换的地方对应添加_\U$4 即可,超 4 个单词依次继续添加即可。
    javasharp
        3
    javasharp  
    OP
       Aug 22, 2015
    @joyeblue 感谢回答。。不过,字段很多,有长有短,这样写法,似乎不太妥。
    javasharp
        4
    javasharp  
    OP
       Aug 22, 2015
    Find: (?<=")(\w*)([A-Z])([a-z]+)(\w*)(?=")
    Replace: $1_\U$2$3$4
    一直重复以上替换操作,直至全部替换完毕

    最后,删除字段前的下划线
    Find: (?<=")_(\w+)(?=")
    Replace: $1

    也没有想出更优雅的做法,就这样了。
    joyeblue
        5
    joyeblue  
       Aug 22, 2015
    @javasharp 更优雅的做法,就是先匹配,然后从后到前逐个判断$4,$3,$2,$1 是否存在,分别做处理即可。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2509 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 00:22 · PVG 08:22 · LAX 17:22 · JFK 20:22
    ♥ Do have faith in what you're doing.