Preg_Replace用于适合某种模式的大型int

时间:2012-11-25 10:28:39

标签: php regex json

在GIGANTIC字符串中,我试图清理成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解码为关联数组)

2 个答案:

答案 0 :(得分:0)

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

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

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

输入是这样的吗?

{
 29646191: [bunchofjson]
}

输出将是这样的

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

答案 1 :(得分:0)

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

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