由于 chris 没有使用带有 preg_match_all() 模式的环视功能,因此不会捕获所有子字符串。
这将使用preg_match_all() 捕获所有子字符串(没有任何不需要的前导/尾随空格字符):/(?<=\]{2}) ?\K.+?(?=$| \[{2})/ Pattern Demo
var_export(preg_match_all('/(?<=\]{2}) ?\K.+?(?=$| \[{2})/', $input, $out) ? $out[0] : []);
chris 的preg_split() 方法不与前导和尾随空格竞争。这是一个更正/改进的方法(这是我推荐的正则表达式方法):
var_export(preg_split('/ ?\[{2}QVQ\]{2} ?/', $input, 0, PREG_SPLIT_NO_EMPTY));
这是一个非正则表达式方法:
var_export(array_values(array_filter(array_map('trim', explode('[[QVQ]]', $input)), 'strlen')));
非正则表达式方法的分解:
array_values( // reindex the array
array_filter( // unset any empty elements
array_map('trim', // remove leading/trailing spaces from each element
explode('[[QVQ]]', $input) // split on known delimiter
),
'strlen'
)
)