2

我有一个这样的字符串:

 0d(Hi)i(Hello)4d(who)i(where)540d(begin)i(began)

我想把它做成一个数组。我尝试先添加分隔符,以便使用 php 函数爆炸。

 ;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() 不能出现(但至少有一个)

谢谢

4

1 回答 1

2

如果你这样做

preg_match_all('/(\d+)(d\([^()]*\))?(i\([^()]*\))?/', $subject, $result, PREG_SET_ORDER);

在您的原始字符串上,然后您将获得一个数组,其中

$result[$i][0]

包含第ith 个匹配项(即$result[0][0]会是0d(Hi)i(Hello))以及在哪里

$result[$i][$c]

包含第th 匹配c的第 th 个捕获组(即is 、is和is )。i$result[0][1]0$result[0][2]d(Hi)$result[0][2]i(Hello)

那是你想要的吗?

于 2012-07-26T08:13:28.903 回答