【发布时间】:2017-05-07 06:59:21
【问题描述】:
我想将带有嵌套花括号的原始字符串解析为多维数组。下面我添加了有效的示例代码。但主要问题是我的正则表达式只捕获第一个匹配的组并忽略另一个出现。
非常感谢任何帮助。
代码:
$regex = '/(?ims)(group [a-z0-9\s\,\.\:#_\-@]+)\{([^\}]*)\}/';
preg_match_all( $regex, file_get_contents('data.txt', FILE_USE_INCLUDE_PATH), $arr);
$result = array();
foreach ($arr[0] as $i => $x)
{
$selector = trim($arr[1][$i]);
$rules = explode(';', trim($arr[2][$i]));
$result[$selector] = array();
foreach ($rules as $strRule)
{
if (!empty($strRule))
{
$rule = explode(" = ", $strRule);
$result[$selector][][trim($rule[0])] = trim($rule[1]);
}
}
}
原始字符串(data.txt):
group A { T1 { X = 44; }
T2 { Y = 33; } }
group B { T1 { X = 555; } }
代码输出:
Array (
[group A] => Array (
[0] => Array (
[T1 { X] => 44
)
)
[group B] => Array (
[0] => Array (
[T1 { X] => 555
)
)
)
但输出除外:
Array(
[group A] => Array(
[T1] => Array(
[X] => 44
)
[T2] => Array (
[Y] => 33
)
)
[group B] => Array(
[T1] => Array(
[X] => 555
)
)
)
【问题讨论】:
-
你能分享这个原始字符串
group A { T1 { X = 44; } T2 { Y = 33; } }的预期输出吗? -
Array ([group A] => Array ( [0] => Array ( [T1 { X] => 44 )[1] => Array ( [T2 { Y] => 33) )[组 B] => 数组 ( [0] => 数组 ([T1 { X] => 555 ) ) )
-
为什么输出中有大括号?你确定这真的是输出吗?
-
因为细化正则表达式模式也不会解析字符串中的嵌套大括号。这就是问题所在。
标签: php arrays regex multidimensional-array