java - 如何对嵌套标签进行替换并识别嵌套状态?

标签 java regex nested

我有这样的文字:

  ${{stuff${{more stuff}}}}

我想要这个:

  data(stuff+data(more stuff))

不是这个:

  data(stuffdata(more stuff))

我的代码:

int flags = Pattern.CASE_INSENSITIVE | Pattern.DOTALL;

Pattern dataPattern = Pattern.compile("\\$\\{\\{(?<DATA>.*?)\\}\\}", flags);
Matcher dataMatcher = dataPattern.matcher("");


String raw = "${{stuff${{more stuff}}}}";
dataMatcher.reset(raw);

String result =  dataMatcher.replaceAll("data($1)");

那么...如何识别嵌套状态并添加加号?

最佳答案

与我最初的评论相反(仍然适用于一般情况),我相信您的语法实际上足够简单,可以通过简单的替换来解决问题:

${{     -->     +data(
}}      -->     )

然后,在构建最终字符串后,丢弃第一个字符(即 finalResult.substring(1)

关于java - 如何对嵌套标签进行替换并识别嵌套状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20628677/

相关文章:

css - 对 LESS replace() 函数行为感到困惑

css - 复合相对字体大小 : a clean way to adopt the font-size of the child, 不是父元素

java - 看似等效的 Solr 查询之间的评分差异

c# - 如何将韩文添加到此正则表达式中?

java - Android ImageButton 构建成功但不显示

c# - 正则表达式查找html中的隐藏字段

javascript - 是否可以嵌套 JavaScript 对象?

json - Kendo 数据网格 - 如何从嵌套的 JSON 对象设置列值?

java - wsdl Java 客户端上的 "cannot find symbol"

java - LibGDX 混淆器