2016-11-26 50 views
0

我有一個Web服務響應,返回JSON,我需要解析。我想要在起始詞和結束詞之間捕獲"id":"123-abc-345"的所有實例。我需要知道所有的ID,以便我可以在它們之間隨意選擇。我必須在「關鍵開始詞」和「關鍵結束詞」之間尋找的原因是ID元素出現在文檔的各個位置(甚至在開始和結束詞之前),但我只是對ID感興趣在「開始」和「結束」之間。我使用使用RegEx捕獲JSON中兩個單詞之間的重複元素

示例數據:

[]}6778:---esghsrth"id":"95907bc09-568976456-c6a5a-4f87g"[]}6778:---AAAAA{[]}bla...esghshrth"id":"95907bc09-568976456-c6a5a-4f87g"[]}6778:---esghsrth"id":"95907bc09-568976456-c6a5a-4f87g"[]}6778:---esghsrth"id":"95907bc09-568976456-c6a5a-4f87g"[]}6778:---esghsrth"id":"95907bc09-568976456-c6a5a-4f87g"[]}6778:---esghsrth"id":"95907bc09-568976456-c6a5a-4f87g"[]}6778:---esghsrth"id":"95907bc09-568976456-c6a5a-4f87g"[]}6778:---esghsrth"id":"95907bc09-568976456-c6a5a-4f87g"[]}6778:---ZZZZZ[]}6778:---esghsrth"id":"95907bc09-568976456-c6a5a-4f87g"[]}6778:---

我設法得到儘可能:(.*?)(\"id\":\"[^"]*)+ 這確實抓住我感興趣的ID - 可惜也是那些我不需要(在AAAAA之前和之後ZZZZZ)。

This and this and this接近 - 但仍然沒有雪茄。 任何幫助將不勝感激 - 無論是一個正確的方向指針或一個完整的工作正則表達式(即使一個工作示例將是首選:-))

感謝正則表達式大師!

回答

1

全部一步到位,而是一個小技巧(demo):

AAAAA(?!\"id\":\"[^"]*\").*?(\"id\":\"[^"]*\")|(?<!^)\G(?!\"id\":\"[^"]*\").*?(\"id\":\"[^"]*\")(?=.*ZZZZZ)

簡化版,其中\"id\":\"[^"]*\"換成id

AAAAA(?!id).*?(id)|(?<!^)\G(?!id).*?(id)(?=.*ZZZZZ)

通過@nhahtdh explanation啓發。

+0

Evgeniy - 哇。我認爲我需要一些時間來理解你是如何做到的;-)實際上,它最好是一次完成 - 這將爲我省下C字符串manmingplation/regex(bleh)的麻煩 - 以及所有頭/庫包含的東西。 Spasiba! –

1

您可以首先在(?<=AAAAA).*?(?=ZZZZZ)之間捕獲這兩個關鍵字之間的所有內容,然後在結果中搜索此正則表達式(?<=\"id\":\").*?(?=\")。後者將匹配"id":""之間的所有內容,不包括那些。

+0

太好了,感謝Nicolas的解決方案!我想我必須除掉我的C字符串操作和正則表達式技巧(這是Loadrunner的......),但這樣做會很好。再次感謝。最後一個問題 - 我無法將這兩個步驟結合在一起,對吧? –

+1

我不這麼認爲。 –

+0

Nicolas,Evgeniy:我接受Evgeniy的答案爲「正確」,因爲它在我需要處理的過程中爲我節省了很多頭痛。他們都工作,我非常感謝你的幫助!謝謝 ! –

相關問題