2017-01-10 64 views
0

我有以下字符串取两个标签

String s = "{s}lorem ipsum{/s} 
    explanation for lorem ipsum 
    {s}dolar sit amet{/s} 
    explanation for dolar sit amet"; 

我想解析它以两种方式之间的DATAS。我想要获取{s} {/ s}标签和{s} {/ s}未包含的文本内的文本。

我试过下面的代码。

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

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

回答

1

你可以使用这个表达式分别获得两个部分:

\{(\w+)\}(.*?){/\1}((?:(?!\{\w+\}).)*) 
  • 组#2会给你在标签之间的文本。
  • 组#3会给你标签外的文字。

RegEx Demo


如果输入不符合标签上启动,然后使用:

((?:(?!\{\w+\}).)*)\{(\w+)\}(.*?){/\2}((?:(?!\{\w+\}).)*) 
  • 组#1 +第4组会给你文字标签外。
  • 组#3会给你标签内的文字。
+0

如果文本不以标签组开头,该怎么办:https://regex101.com/r/HBka56/10? –

+0

@DmitryEgorov:[在这种情况下检查这个正则表达式](https://regex101.com/r/HBka56/11) – anubhava