今天在工作中遇到了点替换的麻烦事,由于数据类进行了变动,具体情况是这样的,需要将下面的代码:

player.skillData[i].name

替换为:

player.skillData.getSkillInfo(i).name

具体来说就是将[i]改为getSkillInfo(i),不过遇到的问题是,需要修改的数量太多,200+个使用到的地方,而且括号中还不一定是“i”,可能是各种各样的形式(比如“index”、“_myIndex”等),总不能手动的一个一个改吧。。。

最后发现Eclipse是支持使用正则表达式的,所以只需要打开查找/替换窗口,勾上“正则表达式”,在查找文本框中填入:

(skillData\[)([a-zA-Z0-9_$]*)(\])

在替换为文本框中填入:

skillData.getSkillInfo($2)

好了,全部替换,当前文件下的所有文本都会被替换为我们需要的文本了。

最后重点说一下正则表达式的分组:

正则表达式会将匹配到的文本存储在“$”数组中,我们可以使用$0、$1、$2...访问到匹配成功的所有字符串,在表达式中,一个小括号即表示一个分组。

以我们的上面的表达式为例看一个示例,比如下面的文本:

var name:String = player.skillData[i].name;

经过匹配后的结果如下:

$0: skillData[i]
$1: skillData[
$2: i
$3: ]

我们发现,$0始终是匹配到的整个文本,而$1、$2和$3分别对应我们表达式中的3个小括号。

所以在替换时编写$2即表示这里使用匹配出的第二个小括号中的字符即“i”。

记录下我在解决工作中的大量上述修改的方法:

用Java或C#等语言编写一个工具来使用正则表达式替换指定格式的文本并不难,但是我不能直接一个表达式进行套用,这样可能会修改到正确的文本导致报错,所以相比替换更麻烦的是定位的问题。

1.如何精确定位?

我们使用的是Eclipse,在修改源码后问题窗口会提示报错的行,我们可以把这些数据复制出来,这些数据中可以取出报错的文件路径和行数,我们只处理报错的行,而不处理正确的行即可。

如果同一行有多个报错,我们会得到重复的两个信息,需要去掉多余的信息。

2.如何精确修改?

即使精确到行也可能会出现匹配错误的情况,比如“a.b”和“c.d”,我们可能只处理“a.b”,如果采用通用的正则就会修改两个,所以我们需要把关键字a直接加到正则中,就可以实现精确替换了。

最新文章

  1. SDWebImage源码解读之SDWebImageCache(上)
  2. 为什么忘记commit也会造成select查询的性能问题
  3. 函数图象(N=x+y*i)
  4. [DataBase] MongoDB (7) MongoDB 索引
  5. android shader 用法
  6. 李洪强iOS经典面试题130
  7. svn cleanup failed问题解决
  8. 利用Shell命令获取IP地址
  9. NoSQL架构实践(一)——以NoSQL为辅
  10. C++创建一个动态链接库工程
  11. 【转】C++易混知识点1: 指针常量和常量指针的区别,附有详细案例解释
  12. 【作业】HansBug的前三次OO作业分析与小结
  13. NOIP算法小结(转载)
  14. Nmap扫描基础常用命令(包含进阶使用)
  15. 构建eureka-server异常ClassNotFoundException: org.springframework.boot.context.embedded.FilterRegistrationBean
  16. Spring MVC 学习笔记9 —— 实现简单的用户管理(4)用户登录显示局部异常信息
  17. 在CentOS7.4上手动编译安装Mysql-5.7.20
  18. SecTools.Org--bp
  19. MySQL性能优化(一)-- 存储引擎和三范式
  20. 在laravel视图中直接使用{{ csrf_token() }}被翻译成英文显示的处理方法

热门文章

  1. bzoj1499: [NOI2005]瑰丽华尔兹
  2. LeetCode Single Number II 单元素2
  3. 【C#学习笔记】List容器使用
  4. date.plugin.js 日期插件
  5. hdu 3172 Virtual Friends(并查集)University of Waterloo Local Contest 2008.09
  6. [Everyday Mathematics]20150201
  7. UI篇--布局问题
  8. Keep the Customer Satisfied
  9. 【LeetCode 208】Implement Trie (Prefix Tree)
  10. <转>数据库设计的三大范式