正则表达式在大括号之间获取文本

时间:2016-09-16 00:25:15

标签: java regex

我目前正在为我的程序开发一个解析器。解析器解析类似于JSON的代码,但我想远离使用JSON解析器。我必须使用自己的解析器而不是第三方解析器。它使用大括号来包含"设置"。

这是我目前的正则表达式代码。

\\{(\\s*)+(.*?)(\\s*)+\\}

示例输入和输出将是:

输入:{value, value2}

输出:value, value2

现在,这可以正常工作,但是当我想在输入中放入另一个集合时:

输入:{value, {value2}}

输出:value, {value2 }<-Outermost curly bracket

最外面的花括号被留下,因为嵌入式集合中的右大括号成为模式的一部分。

我还希望能够在输入中添加其他集合:

输入:{value, value2} {value3, value4}

(通缉)输出:value, value2 value3, value4

这使得在正则表达式末尾使用$几乎无用。

1 个答案:

答案 0 :(得分:0)

我发现这根本不可能。我所做的是使用正则表达式找到集合的起点。

输入类似于:

@set1{ value1, value2, @set2{ value3, value4}, @set3{ value5, value6}, value7} @set4{ value8, value9 }

这就等同于这个大纲:

  • 设置1
    • 价值1
    • 价值2
    • 设置2
      • 价值3
      • 价值4
    • 设置3
      • 价值5
      • 价值6
    • 价值7
  • 第4集
    • 价值8
    • 价值9

我接下来做的是迭代字符串中的每个字符并计算开括号的数量。然后我确保关闭括号的数量等于一set

我使用递归方法来获取嵌套集。