Java - 以下String的正则表达式是什么

时间:2012-10-18 02:49:10

标签: java regex

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

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

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

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

我想使用Pattern Library中的单个正则表达式和'group'来替换expectedVar和expectedVar2,或者基本上是assertEquals的第二个参数中的任何字符串。

我想在第一个逗号之后和第二个逗号之前接受任何内容,但myString2也可能包含多个逗号(例如。 /“Hello World,/”+“Hello!”

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

先谢谢你

1 个答案:

答案 0 :(得分: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

测试此代码 here