2015-11-17 166 views
0

我就像這樣提取數據與正則表達式

"Country": "FRANCE", "PostalCode": "01, 02, 03" 

字符串當我使用這個表達式:

"(.*)": "(.*)" 

系統返回我只有一個匹配,與2組

MATCH 1 
1. [1-32] `Country": "FRANCE", "PostalCode` 
2. [36-70] `01, 02, 03` 

我做錯了什麼?我想獲得任何匹配值,並且可以使用逗號分隔多個「xxx」:「yyy」令牌。所以,我的字符串也可以是

"Country": "FRANCE", "PostalCode": "01, 02, 03", "Xxxxx": "yy", "Aaaaa5": "b", "Mmmmmmm": "n1, n2, n3-n30" 
+0

尋找[' 「([^」 \\] *(?:\\ [^ \\ 「] *)*)」 \ S *:\ S *「( [^ 「\\] *(?:\\ [^ \\。」] *)*)「'](https://regex101.com/r/qE0zB3/1)? –

+0

您使用哪種語言? –

+0

我不想將此問題鏈接到特定語言。 –

回答

1
$s = '"Country": "FRANCE", "PostalCode": "01, 02, 03"'; 
REGEX = '/\"([^\"]+)\"\s*\:\s*\"([^\"]+)\"/'; 
preg_match_all(REGEX, $s, $res); 
print_r($res); 
+1

這是一個更好的選擇,如果原始字符串不能包含裏面的轉義引號,那麼就選擇這個。 –

+0

只是FYI:沒有必要逃脫我知道的任何正則表達式的冒號(除非它是一個正則表達式,當然:))。 –

1

使用此:"(.*?)": "(.*?)",而不是你想要的小團體成爲可能。

enter image description here

+0

我不會使用它。它與我在評論中發佈的(幾乎)相同的正則表達式相同,但採用懶惰的點匹配風格,效率不高。此外,它會失敗,並使用「Model」:「Some \」Model name \「here」'。 –

+1

我的解決方案只是一個簡單的方法,考慮他在數據庫中的內容,當然這不是唯一的解決方案,但它在大多數情況下都適用;) –

+1

是的,它是學生的一個很好的解決方案,不適用於生產。 –