我正在使用PHP,并且我开发了一个用于清理JSON字符串的脚本。PHP正则表达式除数字和布尔值外的所有字符
该过程的一个步骤是防止数字和布尔值被明确地双引号。
下面是我排除数字的正则表达式模式。
/\:[\s\n\t]*([^0-9\{\}\[\],\"]+)[\s\n\t]*/i
但是,我试图增强它,使它包含布尔值以及即真和假。没有这个,任何布尔值将被双引号(我想避免)。
任何想法,我可以改善上述正则表达式?
谢谢。
我正在使用PHP,并且我开发了一个用于清理JSON字符串的脚本。PHP正则表达式除数字和布尔值外的所有字符
该过程的一个步骤是防止数字和布尔值被明确地双引号。
下面是我排除数字的正则表达式模式。
/\:[\s\n\t]*([^0-9\{\}\[\],\"]+)[\s\n\t]*/i
但是,我试图增强它,使它包含布尔值以及即真和假。没有这个,任何布尔值将被双引号(我想避免)。
任何想法,我可以改善上述正则表达式?
谢谢。
您可以使用?!
断言来排除布尔值与您的角色类黑名单匹配。
/\:[\s\n\t]*(?!true|false)([^0-9\{\}\[\],\"]+)[\s\n\t]*/i
顺便说一句,字符类,因为它将失败的浮动。另外,我并不完全相信你的“消毒”方法。看来你只能在这里后处理一些裸露的数组属性。 (如果它们由多个不包含在dquotes中的单词组成,那么它会失败)。
谢谢马里奥,我现在就试试看。关于您对“消毒”方法的评论,这种单一模式是十一部分过程的一部分。在使用JSON文件实际清理之前,我正在使用其他11种正则表达式对JSON文件执行各种操作。我现在也会研究float问题。我会尽快给您回复。 –
好的。这工作完美。非常感谢。漂浮物也可以。干杯。 –
你能描述一下你使用的是什么吗?由于php的'json_encode'不会用引号包装一个真正的布尔值。 (请参阅:'echo json_encode(true);') – Yoshi
一旦您拥有数组格式的变量(在json_decode之后),会不会更容易? – ajreal
@Yoshi:这只是一个通用脚本,用于清理传递给json_decode之前格式不正确的JSON。有时,API和其他来源的JSON可能会有一些“螺丝松动”,所以这只是解决这个问题。 –