【问题标题】:Eclipse, regular expression search and replaceEclipse,正则表达式搜索和替换
【发布时间】:2010-11-25 06:10:23
【问题描述】:

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

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

variableName.someMethod()

与:

((TypeName)variableName.someMethod())

variableName 可以是任何变量名。

sed 我可以使用类似的东西:

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

&表示匹配的搜索字符串。 Eclipse中是否有类似的东西?

谢谢!

【问题讨论】:

标签: regex eclipse replace


【解决方案1】:

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

所以:

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

替换:((TypeName)$1)

提示:Ctrl + Space 在文本框中为您提供各种正则表达式编写建议。

【讨论】:

  • 这是一个很好的答案和有用的提示。如果描述得更详细一点会更有帮助。
  • Bravo Eclipse,你正确地实现了这个功能!
  • 我特别喜欢“Unicode 字符的十六进制代码”的示例:)
  • 我想添加一些对我有帮助的代码。我需要用"xxx".equals(stringVar) 替换每个stringVar.equals("xxx")。我在查找/替换对话框中使用了以下正则表达式:search: ([^()! ]+).equals\("(.*)"\)replace: "$2".equals\($1\)
  • 不适合我。总是替换第一组...?
【解决方案2】:

NomeN 已经回答正确,但是这个答案对于像我这样的初学者没有多大用处,因为我们还有另一个问题要解决,我们不知道如何在其中使用RegEx。因此,我对此添加了一些解释。答案是

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

替换:((TypeName)$1)

这里:

在搜索中:

  • 第一个和最后一个() 描述了正则表达式中的一个组

  • \w 描述文字(字母数字+下划线)

  • + 描述一个或多个(即一个或多个字母数字+下划线)

  • . 是描述任何字符的特殊字符(即.+ 表示 一个或多个任意字符)。因为这是一个特殊字符 要描绘.,我们应该给它一个转义字符,即\.

  • someMethod 会被搜索到。

  • 两个括号() 与转义字符一起给出 因为它们是用来描述一个群体的特殊字符 (我们将在下一点讨论组)

替换:

  • 它是((TypeName)$1),这里$1 描述了 团体。这是第一个包含的所有字符 最后一个括号(, ) 在搜索字段中

  • 还要确保您已选中“正则表达式”选项 找到替换框

【讨论】:

    【解决方案3】:

    对于需要解释和如何在 Eclipse 中使用 regxp 示例的人。这是我说明问题的示例。

    我要改名

    /download.mp4^lecture_id=271
    

    /271.mp4
    

    而且可以有多个。

    这是应该怎么做的。

    然后点击查找/替换按钮

    【讨论】:

      【解决方案4】:

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

      ...替换...

      from checks import checklist(_list):
      

      ...与...

      from checks import checklist
      



      正则表达式中的块用括号来描述(前面没有“\”)

      (^.*import ) 找到“from checks import”并将其加载到 $1 (eclipse 从 1 开始计数)

      (.*) 找到下一个“一切”,直到下一个遇到“(”并将其加载到 $2。$2 由于下一部分而停在“(”处(请参见下面的下一行)

      (\(.*\):) 表示“在开始块 $2 之后第一次遇到 "("...停止块 $2 并开始 $3。$3 被加载了 "('any text'):" 或者,在例如,“(_list):”

      然后在替换中,只需放入 $1$2 即可将所有三个块替换为前两个块。



      【讨论】:

        【解决方案5】:

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

        replace: ((TypeName)$0)
        

        【讨论】:

        • 这不是真的 afaik。 $0 代表整个原始搜索词。在这种情况下,我想这会巧合。