【发布时间】:2010-08-11 12:19:26
【问题描述】:
我想替换下面的语句
ImageIcon("images/calender.gif");
与
ImageIcon(res.getResource("images/calender.gif"));
任何人都可以建议一个正则表达式在 eclipse 中执行此操作。任何文件名都可以代替“calender.gif”。
【问题讨论】:
我想替换下面的语句
ImageIcon("images/calender.gif");
与
ImageIcon(res.getResource("images/calender.gif"));
任何人都可以建议一个正则表达式在 eclipse 中执行此操作。任何文件名都可以代替“calender.gif”。
【问题讨论】:
你可以找到这个模式(在正则表达式模式下):
ImageIcon\(("[^"]+")\)
并替换为:
ImageIcon(res.getResource($1))
模式中的\( 和\) 会转义大括号,因为它们要按字面意思匹配。未转义的大括号 (…) 设置了与双引号字符串文字匹配的捕获组 1,它不应该转义双引号(无论如何我认为这对于文件名是非法的)。
[…] 是 character class。 [aeiou] 之类的东西匹配任何一个小写元音。 [^…] 是一个 否定 字符类。 [^aeiou] 匹配除小写元音之一。
+ 是一个或多个重复,因此[^"]+ 匹配除双引号之外的所有内容的非空序列。我们只是用" 包围这个模式来匹配双引号字符串。
所以模式分解如下:
literal( literal)
| |
ImageIcon\(("[^"]+")\)
\_______/
group 1
在替换字符串中,$1 替换第 1 组匹配的内容。
【讨论】:
ImageIcon(getPath() + getFilename()) 和类似的时髦的东西。通用 Java 表达式不是正则表达式,因此通用解决方案应使用正则表达式以外的内容。
Ctrl-F
查找:ImageIcon\("([^\"]*)"\);
替换为:ImageIcon(res.getResource("\1"));
勾选Regular Expressions复选框。
【讨论】: