I have a string like that:
0d(Hi)i(Hello)4d(who)i(where)540d(begin)i(began)
And I want to make an array with that. I try first to add separator, in order to use the php function explode.
;0,d(Hi),i(Hello);4,d(who),i(where);540,d(begin),i(began)
It works but the problem is I want to minimize the separator to save disk space.
Therefore I want to know by using preg_split()
, regular expression, if it's possible to have a huge array like that without using separator:
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)
)
)
I try some code & regex, but I saw that the value in the regular expression was not present in the final result (like explode function, in the final array we do not have the delimitor.)
More over, i have some difficulties to build the regex. Here is the one that I made :
$modif = preg_split("/[0-9]+(d(.+))?(i(.+))?/", $data);
I must precise that d() and i() can not be present (but at least one).
If you do
preg_match_all('/(\d+)(d\([^()]*\))?(i\([^()]*\))?/', $subject, $result, PREG_SET_ORDER);
on your original string, then you'll get an array where
$result[$i][0]
contains the i
th match (i. e. $result[0][0]
would be 0d(Hi)i(Hello)
) and where
$result[$i][$c]
contains the c
th capturing group of the i
th match (i. e. $result[0][1]
is 0
, $result[0][2]
is d(Hi)
and $result[0][2]
is i(Hello)
).
Is that what you wanted?