0

在一个巨大的字符串中,我试图清理成 json。我遇到这样的事情会破坏脚本(通常来自同一来源多次)

{
 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 解码为关联数组)

4

2 回答 2

0

我相信你正在寻找这个替代品:

$output = preg_replace('/(?<=\s)(\d+)(?=\s*:)/', '"$1"', $output);
于 2012-11-25T14:31:13.650 回答
0

我猜,并没有检查我的代码,但试试这个。

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

(我不确定 \[ 和 \] 是必需的。我不认为它们是但我把它们放在那里只是封装...... preg_replace 将替换任何具有任意数量空格的行,然后是 10 个连续的数字字符.

输入是这样的吗?

{
 29646191: [bunchofjson]
}

输出将是这样的

{
 "string...numbers": [anything]
}
于 2012-11-25T11:29:52.177 回答