【发布时间】:2015-10-02 22:32:24
【问题描述】:
我在解析 .ini 文件时遇到了一些麻烦,这些文件的值没有用引号括起来,而且里面有一些换行符。这是一个例子:
[Section1]
ID=xyz
# A comment
Foo=BAR
Description=Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Screenshot=url-goes-here.png
Categories=some,categories
Vendor=abc
[Section2]
Description=Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Somekey=somevalue
当我尝试使用 parse_ini_string($file_content, true, INI_SCANNER_RAW); 解析此字符串时,它返回 false 或仅返回 Description 的第一行。比如
["Description"]=> "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod" // next lines are missing
我已经尝试删除换行符并将值括在引号中,但找不到有效的正则表达式。我需要一个匹配每个键/值的模式,直到下一个键/值或直到注释开始。
不幸的是,有时键在空行之后开始,有时不是。并且值中可以有空行(查看Section2 中的Description)。
所以问题是,我如何修改/清理这个字符串以使用parse_ini_string 读取?
【问题讨论】:
-
如果您的多行字符串被引用,似乎可以正常工作 - ideone.com/JUvA7D
-
.ini 格式在这里似乎不是正确的格式选择。您是否考虑过使用允许数据包含换行符的文件格式,例如 JSON?
-
@Simba 我个人会使用 JSON,但在这种情况下,格式不是我的选择。