最近的项目是做sdk开发,把原有的项目整成一个库工程给第三方调用,为了不暴露源码,把src下的文件打成jar包后丢在了libs目录下,但是jar包引用res资源需要换一种方式去调用,不能用以前的R.XXX.name的方式引用了。
问题来了,上千个R.resType.resName的引用,需要改成ResouceUtil.getResouceIdByType(getApplicationContext(), "resType", "resName")这样的引用方式,不可能手动去改吧?太累。用Ctrl + H一键替换也不能一步到位。在这样的情况下,我不得不硬着头皮去学习正则表达式,利用正则进行替换。
对比了以下两种写法:
R.resType.resName
ResouceUtil.getResouceIdByType(getApplicationContext(), "resType", "resName")
正则表达式初步完成:
查找:R\.([a-zA-Z]{2,9})\.(\w+)
替换:ResouceUtil.getResouceIdByType(getApplicationContext(), "$1", "$2")
解释:查找的格式很简单,也不需考虑贪婪模式,因为后面通常接着的是符号,不在w范围内。主要是两个括号分组,分别在替换的时候引用就好了。
效果如图所示:
附:
正则表达式学习教程(推荐):
http://www.sub-273.com/demo/RegEx/regex.html
正则表达式chm手册:
http://www.php100.com/manual/unze.html
正则表达式在线测试: