Java 在两个标记之间获取数据

Java 在两个标记之间获取数据,java,regex,matcher,Java,Regex,Matcher,我有下面的字符串 String s = "{s}lorem ipsum{/s} explanation for lorem ipsum {s}dolar sit amet{/s} explanation for dolar sit amet"; 我想用两种方式来解析它。我想获取{s}{/s}标记内的文本和未包含在{s}{/s}中的文本 我尝试了以下代码 String firstRemovePattern = "\\{" + "\\}";

我有下面的字符串

   String s =  "{s}lorem ipsum{/s}
    explanation for lorem ipsum
    {s}dolar sit amet{/s}
    explanation for dolar sit amet";
我想用两种方式来解析它。我想获取{s}{/s}标记内的文本和未包含在{s}{/s}中的文本

我尝试了以下代码

 String firstRemovePattern        = "\\{"  + "\\}";
            String replacedWithFirstPattern  = s.replaceAll(firstRemovePattern, "");

但是上面的代码无法获取预期的字符串。我如何才能将其分类?

您可以使用此正则表达式分别获取这两个部分:

\{(\w+)\}(.*?){/\1}((?:(?!\{\w+\}).)*)
  • 第2组将在标记之间为您提供文本
  • 第3组将为您提供标签外的文本


如果您的输入不是以标记开头,请使用:

((?:(?!\{\w+\}).)*)\{(\w+)\}(.*?){/\2}((?:(?!\{\w+\}).)*)
  • 第1组+第4组将为您提供标签外的文本
  • 第3组将为您提供标签内的文本

如果文本不是以标记的组开头,该怎么办:?