php - 分割正则表达式php

标签 php regex

我有一个这样的字符串:

 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) )
       )

我尝试了一些代码和正则表达式,但我发现正则表达式中的值没有出现在最终结果中(就像爆炸函数一样,在最终数组中我们没有分隔符。)

此外,我在构建正则表达式时遇到了一些困难。这是我制作的:

 $modif = preg_split("/[0-9]+(d(.+))?(i(.+))?/", $data); 

我必须明确指出 d() 和 i() 不能存在(但至少有一个)

谢谢

最佳答案

如果你这样做

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]

包含第 i 个匹配的第 c 捕获组(即 $result[0][1]0 $result[0][2]d(Hi)$result[0][2]i(你好))。

这是你想要的吗?

关于php - 分割正则表达式php,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11664761/

相关文章:

c++ - 在 C++ [std::regex] 中替换表达式的内容

php - 按日期显示数据 mysql

php - 使用 Laravel 任务调度请求 URL

正则表达式在连字符前后获取文本

regex - 在 nginx 中使用正则表达式重定向子域

c# - 使用 Regex 匹配多行 C++ 样式注释

PHP:转换时间戳的时区

php - woocommerce:根据城市选择显示不同价格的产品

php - 如何按键而不是偏移对数组进行切片?

regex - 您可以使正则表达式的一部分不区分大小写吗?