2016-09-16 129 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

我用遞歸方法來獲取嵌套集合。

相關問題