java - 如何提取多个花括号之间的元素

标签 java regex

我正在尝试在 Java 上编写一个 Regex 来提取双花括号之间的元素

示例:

I am very much new to java...{{envelope|func"{{aa}}{{ds}}|{{abc.xyz}}"}} and i want to know.... more.  

我试过这个正则表达式,但它没有返回完整的第一个元素

{\{(.*?)(?:\{\{(.*?)\}\})*\}\}

我想提取如下:

  • 信封|func"{{aa}}{{ds}}|{{abc.xyz}}"
  • aa
  • ds
  • abc.xyz

最佳答案

将我的评论转换为答案。这是假设在 {{}} 之间我们有所有非空白字符。

此正则表达式基于前瞻和前瞻内的交替。捕获的组是前瞻本身的一部分。

\{\{(?=((?:(?!\{\{|}})\S)*+|\S*)}})

或者在 Java 中:

final String regex = "\\{\\{(?=((?:(?!\\{\\{|\\}})\\S)*+|\\S*)\\}})";

RegEx Demo

关于java - 如何提取多个花括号之间的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43042554/

相关文章:

java - 查找两个日期之间的月数,包括额外的天数?

java - 在 Java 中使用类文件名字符串调用静态方法

java - 在 javafx 中问题加载图像的相对路径

python正则表达式查找列表中字符串的所有第一个起始单词

用于关键事件输入验证的 javascript 正则表达式故障排除帮助

ruby - 正则表达式匹配 Ruby 中已知字符串后的 1-3 位数

java - 如何在 SSLContextBuilder.create().loadTrustMaterial 的 JUnit 测试中抛出异常?

java - '->' 在 Java 中有什么作用?

regex - 在 VBA 中使用 RegEx 将 d/m/yy 格式化为 yyyy-mm-dd 字符串

java - 可由多个单词组成的字符串的正则表达式 [java]