2012-11-25 29 views
0

在一個GIGANTIC字符串中,我試圖清理成json。我遇到這樣的事情,打破了腳本(來自同一來源通常多次)Preg_Replace for big int擬合某種模式

{ 
29646191: [bunchofjson] 
} 

有沒有的preg_replace我能做些什麼來取代

{ 
stringofrandomlysizednumbers: [anything] 
} 

所有出現隨着

{ 
"string...numbers": [anything] 
} 

沒有工作的物品列表:

$output = preg_replace('/([^\\\])":([0-9]{10,})(,|})/', '$1":"$2"$3', $output); 
$output = preg_replace('/("\w+"):(\d+)(.\d+)?/', '\\1:"\\2\\3"', $output); 
$output = preg_replace('/("\w+"):(\d+)/', '\\1:"\\2"', $output); 
$output = preg_replace('/(\d+):/', '"$1":', $output); 
$output = preg_replace('/("\w+"):(\d+)(.\d+)?/', '\\1:"\\2\\3"', $output); 
$output = preg_replace('/:\s*(\-?\d+(\.\d+)?([e|E][\-|\+]\d+)?)/', ': "$1"', $output); 
$output = json_decode($output, true, 512, JSON_BIGINT_AS_STRING)); 

(在理想情況下,json解碼爲關聯數組)

+1

你可以給你一些* *實例從你的數據? – phant0m

+0

您的原始示例看起來像完全有效的JSON。也許你應該使用更好的(或簡單的標準)JSON解析器?什麼錯誤信息會在你休息時給你什麼? – mvp

+1

你在「沒有工作的事情列表」中的第四次嘗試爲我工作。 – Barmar

回答

0

我在猜測,但沒有檢查過我的代碼,但試試這個。

$output = preg_replace('/^\s*[0-9]{10,}.*/', '"string...numbers": \[anything\]', $output); 

(我不知道該\ [和\]是必需的。我不認爲他們是,但我把它們放在那裏只是包住...... preg_replace函數將替換具有任何數量的任何線的空間,然後連續10個數字小字符。

輸入也正是這樣嗎?

{ 
29646191: [bunchofjson] 
} 

輸出會是這樣

{ 
"string...numbers": [anything] 
} 
+0

我想你錯過了,我需要更多的 { 「29646191」:[bunchofjson] } – Jay

0

我相信你正在尋找這個替代品:

$output = preg_replace('/(?<=\s)(\d+)(?=\s*:)/', '"$1"', $output);