我将chars从文本文件转换为键值数组时遇到问题。 它忽略了空格。
我的文字是这样的:
{
id: "89",
name: "Labour",
description: "<p>{module Labour Featured Stories}</p>",
image: "/media/k2/categories/",
language: "*",
parent: "87"
}
{
id: "90",
name: "International",
description: "<p>{module International Featured Stories}</p>",
image: "/media/k2/categories/",
language: "*",
parent: "87"
}
问题出现在我的preg_match代码中的分隔符附近,我丢失了key1或key'2值中的秒数字!
type="lorem" template="lorem_ipsum.phtml" key1="lorem Ipsum" key2="lorem Ipsum" key2="lorem Ipsum"
帮助!
答案 0 :(得分:5)
此正则表达式应该更好地匹配您的预期文本:
(\w+)="([^"]*)"
一个单词后跟一个等号,然后是双引号,然后是下一个双引号的任何内容。
preg_match_all('/(\w+)="([^"]*)"/', $line_Content, $r);
$myarray = array_combine($r[1], $r[2]);
请注意,对于双引号内的双引号,这将失败,此时您需要转义序列,此时正则表达式变得非常麻烦。
答案 1 :(得分:3)
它看起来像XML / HTML节点的属性。为什么不让DOMParser
做我们的工作?
$string = 'type="lorem" template="lorem_ipsum.phtml" key1="lorem Ipsum" key2="lorem Ipsum"';
$xml = '<foo ' . $string . ' />';
$doc = new DOMDocument();
@$doc->loadXML($xml);
$element = $doc->getElementsByTagName('foo')->item(0);
foreach($element->attributes as $attr) {
$result [$attr->name] = $attr->value;
}
var_dump($result);
如果您明确要验证字符串格式良好,这非常有用。但是,如果您的输入不是XML / HTML,则无效。