Java Regex在代码中捕获多个组

时间:2014-07-23 00:04:01

标签: java regex

我需要在机器生成的代码中解析多个if和else if条目以提取eventName值。我所关心的只是我的字符串中引号中包含的无数组合。

请考虑以下代码:

  String input = "if (eventName== \"event1\") {//blahblah\n}\nelse if (eventName==\"event2\") {//blahblah\n   }";       
  String strPattern = "eventName(?s)==.*\"(.*)\"";          
  Pattern pattern = Pattern.compile(strPattern,Pattern.CASE_INSENSITIVE);

  Matcher match = pattern.matcher(input);               

  while (match.find()) {
        System.out.printf("group: %s%n", match.group(1));
  }

这只给了我第二个捕获的组event2。如何使用eventName ==

之间的空白和换行的所有组合来解析上述内容

1 个答案:

答案 0 :(得分:1)

你可以尝试非贪婪的方式

String strPattern = "eventName(?s)==.*?\"(.*?)\"";    

或者

String strPattern = "eventName==\\s*\"([^\"]*)\"";  

输出:

group: event1
group: event2

第二个正则表达式模式说明:

  eventName==              'eventName=='
  \s*                      whitespace (\n, \r, \t, \f, and " ") (0 or more times)
  "                        '"'
  (                        group and capture to \1:
    [^"]*                    any character except: '"' (0 or more times)
  )                        end of \1
  "                        '"'