我有一个这样的字符串:
0d(Hi)i(Hello)4d(who)i(where)540d(begin)i(began)
我想把它变成一个阵列。 我首先尝试添加分隔符,以便使用php函数explode。
;0,d(Hi),i(Hello);4,d(who),i(where);540,d(begin),i(began)
它可以工作,但问题是我想最小化分隔符以节省磁盘空间。 因此,我想通过使用preg_split,正则表达式来了解,如果可以在不使用分隔符的情况下拥有类似的巨大数组:
Array ( [0] => Array ( [0] => 0 [1] => d(hi) [2] => i(Hello) )
[1] => Array ( [0] => 4 [1] => d(who) [2] => i(where) )
[2] => Array ( [0] => 540 [1] => d(begin) [2] => i(began) )
)
我尝试了一些代码&正则表达式,但我看到正则表达式中的值不存在于最终结果中(如explode函数,在最终数组中我们没有分隔符。)
更重要的是,我在构建正则表达式时遇到了一些困难。这是我做的那个:
$modif = preg_split("/[0-9]+(d(.+))?(i(.+))?/", $data);
我必须确切地说d()和i()不能存在(但至少有一个)
由于
答案 0 :(得分:2)
如果你这样做
preg_match_all('/(\d+)(d\([^()]*\))?(i\([^()]*\))?/', $subject, $result, PREG_SET_ORDER);
在原始字符串上,然后你会得到一个数组
$result[$i][0]
包含i
匹配(即$result[0][0]
将0d(Hi)i(Hello)
)和
$result[$i][$c]
包含c
匹配的i
捕获组(即$result[0][1]
为0
,$result[0][2]
为d(Hi)
和{{ 1}}是$result[0][2]
)。
这就是你想要的吗?