Eclipse中使用正则表达式替换的一点记录(使用正则表达式的分组)

今天在做项目中,需要把Android中原来的” findViewById(R.id.xxxxxx);“  替换成 getIdentifier 的方式去检索一个控件,但是一个项目那么怎么一个个手动改啊!当然,因为以前用过eclipse批量替换的功能,知道可以用正则表达式批量替换,所以又查看了相关资料,终于完成了我想要的效果,。

如:

查找:(findViewById\()R.id.(\w*)\)
替换:ResInflaterUtiil.findViewByName(this,"$2")


这个表达式可以替换大部分findViewById的索引方式

参考文章 1:

类进行了变动,具体情况是这样的,需要将下面的代码:

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直接加到正则中,就可以实现精确替换了。

天道酬勤,功不唐捐!

链接:http://www.cnblogs.com/hammerc/p/4630850.html


参考文章2:正则表达式

http://deerchao.net/tutorials/regex/regex.htm

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Eclipse 进行搜索时,可以使用正则表达式来更精确地匹配搜索结果。以下是一些常见的正则表达式示例: 1. 匹配任意字符: `.` 表示匹配任意单个字符。例如,`a.c` 可以匹配 `abc`、`aac`、`afc` 等字符串。 2. 匹配特定字符: `[ ]` 表示匹配括号内的任意一个字符。例如,`[aeiou]` 可以匹配任意一个元音字母。 3. 匹配字符集合: `{ }` 表示匹配括号内的字符集合。例如,`{foo,bar}` 可以匹配 `foo` 或 `bar`。 4. 匹配任意数量的字符: `*` 表示匹配 0 个或多个字符。例如,`ab*c` 可以匹配 `ac`、`abc`、`abbc` 等字符串。 5. 匹配至少一个字符: `+` 表示匹配 1 个或多个字符。例如,`ab+c` 可以匹配 `abc`、`abbc`、`abbbc` 等字符串。 6. 匹配零个或一个字符: `?` 表示匹配 0 个或 1 个字符。例如,`ab?c` 可以匹配 `ac` 或 `abc`。 7. 匹配行首和行尾: `^` 表示匹配行首,`$` 表示匹配行尾。例如,`^abc$` 可以匹配 `abc`。 8. 逻辑或: `|` 表示逻辑或。例如,`foo|bar` 可以匹配 `foo` 或 `bar`。 9. 匹配单词边界: `\b` 表示匹配单词边界。例如,`\bfoo\b` 可以匹配 `foo`,但不能匹配 `food` 或 `foobar`。 以上是一些常见的正则表达式示例,你可以根据实际情况自行调整和组合。在 Eclipse 进行搜索时,可以在搜索框勾选“正则表达式”选项,在搜索时即可使用正则表达式

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江西省遂川县常驻深圳大使

喜欢本文,打赏下作者吧~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值