0

我正在编写一个程序,它接收一个java文件并检查每一行是否有一个包含assertEquals的字符串,然后替换属于assertEquals第二个参数的字符串(即expectedVar和expectedVar2)。

假设这些行是从文件中读取并放置在字符串变量中的:

String myString1 = "Assert.assertEquals(outputMessage, expectedVar, actualVar);" 

String myString2 = "Assert.assertEquals(/"Hello World, /" + "Hello!", expectedVar2, actualVar);" 

我想使用模式库中的单个正则表达式以及“组”并替换 expectedVar 和 expectedVar2 或基本上位于 assertEquals 的第二个参数中的任何字符串。

我正在考虑在第一个逗号之后和第二个逗号之前接受任何内容,但 myString2 也可以包含多个逗号(例如/"Hello World, /" + "Hello!")。

我不确定如何解决这个问题。如果您有其他想法,我愿意以不同的方式实施。

谢谢先进

4

1 回答 1

0

您需要使用正则表达式原子分组(?>...|...)>>

Java代码:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

class Main
{
  public static void main (String[] args) throws java.lang.Exception
  {
    String text = "Assert.assertEquals(/\"Hello World, /\" + \"Hello!\", expectedVar2, actualVar)";
    String pattern = "Assert\\.assertEquals\\((?>(?:[^,]*\"(?:[^,]*,)+[^,]*\")+|[^,]+),\\s*([^,]+)";
    Pattern r = Pattern.compile(pattern);
    Matcher m = r.matcher(text);
    if (m.find()) {
      System.out.println("MATCH FOUND: " + m.group(1));
    } else {
      System.out.println("NO MATCH");
    }
  }
}

输出:

MATCH FOUND: expectedVar2

在此处测试此代码。

于 2012-10-18T12:29:58.823 回答