使preg_split与关闭标签
问题描述:
我有这样使preg_split与关闭标签
$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来删除空白元素,除非它是唯一的解决方案)?
答
你应该使用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);
输出:
Array
(
[0] => str1
[1] => str2
[2] => str3
[3] => str4
[4] => str5
)
答
使用preg_match_all
preg_match_all('~\[.]\K.*?(?=\[\/.])~', $str, $matches);
或
preg_match_all('~\[(.)]\K.*?(?=\[\/\1])~', $str, $matches);