我的字符串类似'[15] [18] [22]',现在我喜欢把它分成[15]和[18]和[22]的数组。我正在尝试这个正则表达式
\[\d+\]
但它只分裂了第一个。
感谢您的帮助
答案 0 :(得分:2)
最好将preg_match_all
与你想要捕获的内容结合使用:
if (preg_match_all('/\[\d+]/', $str, $m)) {
print_r($m[0]);
}
<强>输出:强>
Array
(
[0] => [15]
[1] => [18]
[2] => [22]
)
否则您可以将此preg_split
与捕获组一起使用:
$str = '[15][18][22]';
$arr = preg_split('/(\[\d+])/', $str, -1,
PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
print_r($arr);
<强>输出:强>
Array
(
[0] => [15]
[1] => [18]
[2] => [22]
)
答案 1 :(得分:0)
它没有比这更简单。模式中的三个字符。您只需要在每个]
之后在零宽度位置上爆炸。 \K
告诉正则表达式引擎忘记/释放先前匹配的字符。
~]\K~
Pattern Demo
代码:(Demo)
$string = '[15][18][22]';
var_export(preg_split('~]\K~', $string, -1, PREG_SPLIT_NO_EMPTY));
输出:
array (
0 => '[15]',
1 => '[18]',
2 => '[22]',
)
这将以最高效率执行,因为它没有任何捕获组,外观或减慢速度的替代方法。