2015-08-14 103 views
1

我正在與REGEX一起使用表示對象的複雜JSON,每個對象都由UUID表示。問題是REGEX匹配每個單獨的對象也匹配更大的模式。舉個例子,執行下列操作:REGEX區分內部匹配與外部匹配

{_id:"(UUID)" value:"x"}(additional info here),{_id:"(UUID)" value:"y"}(additional info here) 

,如果我現在做的圖案如/{_id:"(.+?)".+value:"(.+?)"}/g抓住,而不是每一個單獨的匹配將它不是較大的圖案相互匹配的ID和價值的是,作爲第一個ID和最後一個值?

什麼是確保每個組都被單獨拉出的最佳方式,而不是一個更大的模式,它也匹配?

+0

使用什麼語言?在一些你可以爲此設置一個標誌..即在PHP中它是U'/../ gU'(其中標誌'g'不存在於PHP ^^) –

+0

使用java的正則表達式測試 –

+0

好吧,這不是我的世界^ ^但搜索:'PCRE_UNGREEDY' –

回答

1

我能弄明白,我沒有使用非貪婪的「?」正確。我能夠通過使用以下各項單獨獲取每一個:

/{_id:"(.+?)".+?value:"(.+?)"}/g 
1

與你的正則表達式/{_id:"(.+?)".+value:"(.+?)"}/g

.+應該是問題.+?

所以,現在的正則表達式是:

{_id:"(.+?)".+?value:"(.+?)"}/g 

https://regex101.com/r/xK0qJ8/2

+0

我認爲我們同時發佈,我會接受你的答案。我仍然試圖瞭解什麼?停止在和時 –

+1

@DavidTorrey基本上'?'告訴你正則表達式儘快停止,儘可能。因此,在https://regex101.com/r/xK0qJ8/3這樣的示例中,只要看到字母d就會停止比賽。 – m0meni