【发布时间】:2012-09-13 09:56:18
【问题描述】:
我有一个字符串,我需要在 PHP 中将其解析为一个数组。字符串看起来像这样:
(Key: ALL_HTTP)(Value:HTTP_HOST:10.1.1.1 )(Key: ALL_RAW)(Value:Host: 10.1.1.1:80 )(Key: APPL_MD_PATH)(Value:/ROOT)(Key: AUTH_TYPE)(Value:)(Key: AUTH_USER)(Value:)(Key: AUTH_PASSWORD)(Value:)(Key: LOGON_USER)(Value:)(Key: REMOTE_USER)(Value:)
“键/值”对的数量可以不受限制,但通常每个字符串大约 30-40 个。
我一直在玩 preg_match 和 PHP.net 的一个例子的变体 - 像这样:
preg_match('/(\S+): (\S+)/', $string, $result);
这让我将第一个键作为 $result[0] 找回,但对其他键无济于事。
如果有人能用正确的表达方式帮助我,那就太好了。对于使用 PCRE 拆分字符串的任何好的阅读资源,我也将不胜感激。
谢谢大家!
【问题讨论】:
-
“解析成数组”是什么意思?要将键转换为关联数组的键并将值作为关联值?
-
对不起 Gianps - 是的,这就是我的意思。所以 (Key: ALL_HTTP)(Value:HTTP_HOST:10.1.1.1 ) 会变成类似 array("ALL_HTTP" => "HTTP_HOST:10.1.1.1")
-
如果你的输出总是带有分组键和值的括号,你可以完全跳过正则表达式,只删除第一个和最后一个括号,然后在
)(上拆分并将结果数组成对创建一个新的key => value数组(并且您只需修剪 hte 字符串并剥离第一个 'Key:' 或 'Value:'。 -
感谢@mathematical.coffee 的想法!我试了一下,并用它做了一个 hacky 解决方案:)。
标签: php regex preg-match pcre