正则表达式在[和]之间拆分字符串

时间:2018-04-27 20:00:57

标签: php regex

我的字符串类似'[15] [18] [22]',现在我喜欢把它分成[15]和[18]和[22]的数组。我正在尝试这个正则表达式

\[\d+\]

但它只分裂了第一个。

感谢您的帮助

2 个答案:

答案 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]',
)

这将以最高效率执行,因为它没有任何捕获组,外观或减慢速度的替代方法。