正则替换的使用

2015-08-20 21:39:02 +08:00
 javasharp
如何将驼峰式的注解字段通过正则替换成下划线的字段,而不影响到其他的驼峰式命名的方法或变量?
eg:
@Column (name="lastUpdateDate")//如何替换成 @Column (name="LAST_UPDATE_DATE")
public Date getLastUpdateDate (){
return lastUpdateDate;
}
2124 次点击
所在节点    程序员
5 条回复
flowfire
2015-08-20 22:04:56 +08:00
断言。。。。吧
joyeblue
2015-08-20 22:21:03 +08:00
这个一个针对例子的可用 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
2015-08-22 16:07:33 +08:00
@joyeblue 感谢回答。。不过,字段很多,有长有短,这样写法,似乎不太妥。
javasharp
2015-08-22 16:11:17 +08:00
Find: (?<=")(\w*)([A-Z])([a-z]+)(\w*)(?=")
Replace: $1_\U$2$3$4
一直重复以上替换操作,直至全部替换完毕

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

也没有想出更优雅的做法,就这样了。
joyeblue
2015-08-22 23:08:29 +08:00
@javasharp 更优雅的做法,就是先匹配,然后从后到前逐个判断$4,$3,$2,$1 是否存在,分别做处理即可。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/214660

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX