2011-09-05 94 views
0

我正在使用PHP,并且我开发了一个用于清理JSON字符串的脚本。PHP正则表达式除数字和布尔值外的所有字符

该过程的一个步骤是防止数字和布尔值被明确地双引号。

下面是我排除数字的正则表达式模式。

/\:[\s\n\t]*([^0-9\{\}\[\],\"]+)[\s\n\t]*/i 

但是,我试图增强它,使它包含布尔值以及即真和假。没有这个,任何布尔值将被双引号(我想避免)。

任何想法,我可以改善上述正则表达式?

谢谢。

+0

你能描述一下你使用的是什么吗?由于php的'json_encode'不会用引号包装一个真正的布尔值。 (请参阅:'echo json_encode(true);') – Yoshi

+0

一旦您拥有数组格式的变量(在json_decode之后),会不会更容易? – ajreal

+0

@Yoshi:这只是一个通用脚本,用于清理传递给json_decode之前格式不正确的JSON。有时,API和其他来源的JSON可能会有一些“螺丝松动”,所以这只是解决这个问题。 –

回答

1

您可以使用?!断言来排除布尔值与您的角色类黑名单匹配。

/\:[\s\n\t]*(?!true|false)([^0-9\{\}\[\],\"]+)[\s\n\t]*/i 

顺便说一句,字符类,因为它将失败的浮动。另外,我并不完全相信你的“消毒”方法。看来你只能在这里后处理一些裸露的数组属性。 (如果它们由多个不包含在dquotes中的单词组成,那么它会失败)。

+0

谢谢马里奥,我现在就试试看。关于您对“消毒”方法的评论,这种单一模式是十一部分过程的一部分。在使用JSON文件实际清理之前,我正在使用其他11种正则表达式对JSON文件执行各种操作。我现在也会研究float问题。我会尽快给您回复。 –

+0

好的。这工作完美。非常感谢。漂浮物也可以。干杯。 –

相关问题