2016-09-16 187 views
-3

我目前正在为我的程序开发解析器。解析器解析类似于JSON的代码,但我想远离使用JSON解析器。我必须使用自己的解析器而不是第三方解析器。它使用大括号来包围“集合”。正则表达式在大括号之间获取文本

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

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

一个例子输入和输出是:

输入:{value, value2}

输出:value, value2

现在,这个工作正常,但当我想提出的另一组输入:

输入:{value, {value2}}

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

最外花括号被留下,因为从嵌入组右大托架成为图案的一部分。

我也希望能够把其他组输入:

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

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

这使得在正则表达式的结尾使用$实际无用。

+0

这个'{(\ s *)+(。*?)(\ s *)+}'是一个不好的方法。如果dot-all标志被设置,那么'\ s'是多余的。如果dot-all标志设置为_NOT_,那么这个'。*?'将只允许1行,然后它需要可选的空格,然后是'}'。除非你只想匹配1行,否则这种做法会失败。 – sln

+0

Java中的正则表达式不支持递归,因此您不能使用它来解析嵌套结构。 – Pshemo

+1

使用本地Java语言递归函数调用,维护自己的大括号计数。 Java中的正则表达式是不可能的。请求升级。 – sln

回答

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

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

相关问题