Eclipse,正则表达式搜索和替换

136

在eclipse中,当进行正则表达式搜索和替换时,是否可以将匹配的搜索字符串作为替换字符串的一部分使用?

基本上,我想要替换所有出现的

variableName.someMethod()

使用:

((TypeName)variableName.someMethod())

其中的variableName可以是任何变量名。

sed中,我可以使用类似以下的语句:

s/[a-zA-Z]+\.someMethod\(\)/((TypeName)&)/g

也就是说,&代表匹配的搜索字符串。Eclipse中是否有类似的功能呢?

谢谢!


Eclipse RegEx的文档很好:http://help.eclipse.org/kepler/index.jsp?topic=%2Forg.eclipse.jubula.client.ua.help%2Fhtml%2Freference%2Fnode4.html - Kellen Stuart
5个回答

249

是的,()可以捕获一个组。您可以再次使用$i,其中i是第i个捕获组。

因此:

搜索:(\w+\.someMethod\(\))

替换为:((TypeName)$1)

提示:在文本框中使用Ctrl+Space可以获得有关正则表达式写作的各种建议。


这是一个不错的答案和有用的提示。如果能再多详细描述一些就更有帮助了。 - iammilind
不错,Eclipse,你很好地实现了这个功能! - Kenogu Labz
我特别喜欢“Unicode字符的十六进制代码”这个例子 :) - Stewart Murrie
我想添加一些真正帮助我的代码。我需要将每个 stringVar.equals("xxx") 替换为 "xxx".equals(stringVar)。我在查找/替换对话框中使用了以下正则表达式:search: ([^()! ]+).equals\("(.*)"\)replace: "$2".equals\($1\) - LaDude
不适用于我。始终替换第一组...? - RightmireM
你知道在替换中是否可以使用转换选项来进行大写或小写替换吗?假设的例子: 替换:((TypeName)TOUPPER($1)) - tierrarara

8

使用...
搜索 = (^.*import )(.*)(\(.*\):)
替换 = $1$2

...替换...

from checks import checklist(_list):

...with...

from checks import checklist

正则表达式中的块由括号分隔(不需要在其前加“\”)。

(^.*import ) 查找 "from checks import " 并将其加载到 $1 中(eclipse 从 1 开始计数)。

(.*) 查找下一个 "everything" 直到遇到下一个 "(",并将其加载到 $2。$2 因为接下来的部分而在 "(" 处停止 (参见下一行)

(\(.*\):) 表示“在起始块 $2 的第一个遇到的 '(' 处 ... 停止块 $2 并开始 $3。” $3 将会带有 "('any text'):" 或者在示例中是 "(_list):"

然后在替换中,只需将 $1$2 放置以用前两个块替换所有三个块。

6

NomeN 已经给出了正确的答案,但对于像我这样的初学者来说,这个答案并没有太大用处,因为我们将会遇到另一个问题需要解决,而我们不知道如何在其中使用RegEx。因此,我在这里添加一些解释。答案是:

搜索:(\w+\\.someMethod\\(\\))

替换:((TypeName)$1)

在这里:

在搜索中:

  • 第一个和最后一个 () 表示正则表达式中的一个组。

  • \w 表示单词(字母数字 + 下划线)。

  • + 表示一个或多个(即一个或多个字母数字 + 下划线)。

  • . 是一个特殊字符,表示任何字符(即 .+ 表示 一个或多个任何字符)。由于这是一个特殊字符, 要表示一个 .,我们应该在它前面加上转义字符,即 \.

  • someMethod 给出了要搜索的内容。

  • 两个括号 () 与转义字符一起给出, 因为它们是特殊字符,用于表示一个组 (我们将在下一个点中讨论组)。

在替换中:

  • 它给出了 ((TypeName)$1),这里的 $1 表示 组。也就是说,搜索字段中第一个和最后一个括号 () 中包含的所有字符。

  • 还要确保您已经选中了“正则表达式”选项。


2

在STS(SpringSource Tool Suite)中,组的编号至少从0开始,因此替换字符串将为

replace: ((TypeName)$0)

5
据我所知,那不是真的。$0代表整个原始搜索词。在这种情况下,我猜这可能会巧合地起作用。 - Walter Heck

0

对于需要在Eclipse中使用正则表达式的解释和示例的人来说,这里是我的示例,说明了问题。

enter image description here

我想要重命名

/download.mp4^lecture_id=271

/271.mp4

而且这些可能会有多个。

以下是应该如何完成。

enter image description here

然后点击查找/替换按钮


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接