获取两个标记之间的数据

时间:2017-01-10 06:46:12

标签: 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 replacedWithFirstPattern  = s.replaceAll(firstRemovePattern, "");

但上面的代码没有获取预期的字符串。我怎样才能解决这个问题呢?

1 个答案:

答案 0 :(得分:1)

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

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

RegEx Demo

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

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