有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

用正则表达式在Eclipse中查找/替换java

我需要换一个

Sprite name = new Sprite(number1, number2, this.mScritteRegion.get(number3)
{
     stuff_here
};

这里的名字、号码和东西是我想保留的部分

RectangularShape name = mLanguageManager.getSpriteWithText(number1, number2, 0, 0, "", getResources.getString(R.string.), mLanguageManager.getFont("main_font"), new IOnAreaTouched()
{
      stuff_here
});

到目前为止,我使用regex找到了代码的第一部分,但我无法选择新行+{+stuff_here+}

这里是正则表达式

Sprite (\w)* = new Sprite\((\d)*(\s)*,(\s)*(\d)*(\s)*,(\s)*this.mScritteRegion.get\((\d)*\)\)

我想我需要用什么来回答它

RectangularShape $1 = mLanguageManager.getSpriteWithText\($2, $5, 0, 0, "", getResources.getString\(R.string.\), mLanguageManager.getFont\("main_font"\), new IOnAreaTouched\(\) $X\)

我放$X是因为我仍然不知道它将是什么索引,另外我也不知道如何处理};到});。我必须在}之前把东西拿到这里;,因为它是唯一允许我捕捉一切的分隔符,但我不知道如何在它们之间插入括号

我今天刚开始看广告regex,所以我是这个领域的不速之客

你能帮我吗


共 (1) 个答案

  1. # 1 楼答案

    我在NetBeans中这样做了,我认为正则表达式必须看起来相同,可能替换字符不同(我将在使用Eclipse访问计算机时进行检查)

    捕捉第一个字符串的正则表达式是:

    (?s)Sprite (\w+) = new Sprite\((\w+), (\w+),.*?(.\{.*?\});
    

    替换正则表达式是

    RectangularShape $1 = mLanguageManager.getSpriteWithText($2, $3, 0, 0, "", getResources.getString(R.string.), mLanguageManager.getFont("main_font"), new IOnAreaTouched()$4);
    

    几句话:

    • (?s)标志表示点(.)可以与新行字符匹配
    • 这里有一个假设:};序列不能出现在stuff_here块中
    • 这种转换会丢失签名末尾的新行字符——不过语义是相同的,您可以使用格式模板将其带回来

    因此,来源是:

    Sprite name = new Sprite(number1, number2, this.mScritteRegion.get(number3)
    {
      stuff_here
    };
    

    我得到:

    RectangularShape name = mLanguageManager.getSpriteWithText(number1, number2, 0, 0, "", getResources.getString(R.string.), mLanguageManager.getFont("main_font"), new IOnAreaTouched()   {
             stuff_here
        });