Java正则表达式:正向和反向查找中的多个匹配项

时间:2018-10-23 19:42:24

标签: java regex

我有一些这样的字符串

  • my {test} value
  • my { test } value
  • my { test } value

我需要创建一个正则表达式,使所有内容{}内都没有空格。

在下一个模式(?<=\{)\s*[a-zA-Z]+\s*(?=})中,我得到了花括号的内容,但带有空格

enter image description here

如果我像这样\s*(?<=\{\s*)[a-zA-Z]+(?=\s*})设为正向,那么我会看到下一个错误

  

无法执行正则表达式。 java.util.regex.PatternSyntaxException:后向组在索引8(?<= {\ s *)[a-zA-Z] +(?= \ s *})^

在没有每个正则表达式匹配的trim()的情况下是否可以实现这一目标?

1 个答案:

答案 0 :(得分:3)

您不需要向前看或向后看。像这样的简单正则表达式就足够了,

\{\s*(.*?)\s*\}

演示, https://regex101.com/r/REDmDT/2(包括更多示例字符串)

就像你说的那样,“我需要创建一个正则表达式,将所有内容放入{}且不带空格”

此正则表达式为您提供居中括号内的所有内容,同时排除左右空间,并按原样保留内部任何空间。

这是演示相同代码的Java代码。

public static void main(String[] args) throws IOException {
    List<String> list = Arrays.asList("my  {test} value", "my  {   test     } value", "my  { test  } value",
            "my  { test hello I am  } value", "my  { testing 10 times  } value");
    Pattern p = Pattern.compile("\\{\\s*(.*?)\\s*\\}");

    list.forEach(x -> {
        Matcher m = p.matcher(x);
        if (m.find()) {
            System.out.println(x + " --> " + m.group(1));
        }
    });
}

此输出

my  {test} value --> test
my  {   test     } value --> test
my  { test  } value --> test
my  { test hello I am  } value --> test hello I am
my  { testing 10 times  } value --> testing 10 times
相关问题