如何使用正则表达式在大括号中提取单词?

mah*_*hju 3 java regex

我想提取括在花括号中的所有单词,所以我有一个像这样的表达式

foo {bar} moo {mar}
Run Code Online (Sandbox Code Playgroud)

要匹配的字符串可能包含任意数量的这些单词,但我开始认为我正在以错误的方式处理此问题.

我的尝试

而且我试图将大括号分成几组,这样我就可以使用每一个匹配.所以,我做了一个正则表达式:

String rx = ".*\\{({GROUP}\\w+)\\}.*";
Run Code Online (Sandbox Code Playgroud)

注意:我正在使用JRegex语法,所以我需要逃避一些问题.

结果

我得到的结果是一个(尽管是正确的)匹配bar,而我期待两个匹配barmar.我误解了什么,我该如何纠正呢?我可能需要为该.部分使用其他一些量词,但我希望你也可以帮助我.

提前谢谢了!

Jul*_*rau 5

您的正则表达式.*\{({GROUP}\w+)\}.*不起作用,因为它一次匹配所有输入字符串:

  • .* 火柴 foo
  • \{({GROUP}\w+)\} 火柴 {bar}
  • .* 火柴 moo {mar}

你应该使用这样的东西:

List<String> matchList = new ArrayList<String>();

Pattern regex = Pattern.compile("\\{([^}]*)\\}");
Matcher regexMatcher = regex.matcher(subjectString);
while (regexMatcher.find()) 
{
  matchList.add(regexMatcher.group());
} 
Run Code Online (Sandbox Code Playgroud)

此正则表达式不处理内部花括号

  • "(?<= \\ {)([^}]*)(?= \\})"正则表达式应该给你没有括号的单词. (3认同)