我有一个像这样的字符串
$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删除空白元素,除非它是唯一的解决方案)?
答案 0 :(得分:3)
您应该将preg_split
与PREG_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);