取两个标签
问题描述:
我有以下字符串取两个标签
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, "");
但上面的代码不会获取预期的字符串。我怎样才能解决这个问题?
答
你可以使用这个表达式分别获得两个部分:
\{(\w+)\}(.*?){/\1}((?:(?!\{\w+\}).)*)
- 组#2会给你在标签之间的文本。
- 组#3会给你标签外的文字。
如果输入不符合标签上启动,然后使用:
((?:(?!\{\w+\}).)*)\{(\w+)\}(.*?){/\2}((?:(?!\{\w+\}).)*)
- 组#1 +第4组会给你文字标签外。
- 组#3会给你标签内的文字。
如果文本不以标签组开头,该怎么办:https://regex101.com/r/HBka56/10? –
@DmitryEgorov:[在这种情况下检查这个正则表达式](https://regex101.com/r/HBka56/11) – anubhava