带有结束标记的preg_split

时间:2015-07-20 06:56:24

标签: php regex

我有一个像这样的字符串

$string = '[c]str1[/c][c]str2[/c][c]str3[/c][c]str4[/c][c]str5[/c]';

我想拆分它以获取数组中的所有strX

到目前为止,我设法做到了这样

$strarray = preg_split('/\[.](.*?)\[\/.]/', $string, -1, PREG_SPLIT_DELIM_CAPTURE);

但我得到的结果是

array (
  0 => '',
  1 => 'str1',
  2 => '',
  3 => 'str2',
  4 => '',
  5 => 'str3',
  6 => '',
  7 => 'str4',
  8 => '',
  9 => 'str5',
  10 => '',
)

是否有任何正则表达式模式可以直接删除空白数组元素(我不想循环遍历$ strarray删除空白元素,除非它是唯一的解决方案)?

2 个答案:

答案 0 :(得分:3)

您应该将preg_splitPREG_SPLIT_NO_EMPTY标志一起使用:

  

<强> PREG_SPLIT_NO_EMPTY
  如果设置了此标志,则preg_split()将仅返回非空片段。

代码:

$strarray = preg_split('/\[.](.*?)\[\/.]/', $string, -1, PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY);

请参阅IDEONE demo

输出:

Array
(
    [0] => str1
    [1] => str2
    [2] => str3
    [3] => str4
    [4] => str5
)

答案 1 :(得分:0)

使用preg_match_all

preg_match_all('~\[.]\K.*?(?=\[\/.])~', $str, $matches);

preg_match_all('~\[(.)]\K.*?(?=\[\/\1])~', $str, $matches);

DEMO