我有以下正则表达式:

\[([^ -\]]+)( - ([^ -\]]+))+\]

这可以成功匹配以下内容:
[abc - def - ghi - jkl]

但是匹配项是:
Array
(
    [0] => [abc - def - ghi - jkl]
    [1] => abc
    [2] =>  - jkl
    [3] => jkl
)

我需要的是这样的:
Array
(
    [0] => [abc - def - ghi - jkl]
    [1] => abc
    [2] =>  - def
    [3] => def
    [4] =>  - ghi
    [5] => ghi
    [6] =>  - jkl
    [7] => jkl
)

我可以在C#中查看“捕获”组来做到这一点。如何在PHP中做到这一点?

最佳答案

这不是正则表达式的工作。与\[([^\]]*)\]匹配,然后由split" - "第一次捕获。

<?php
  $str = "[abc - def - ghi - jkl]";
  preg_match('/\[([^\]]*)\]/', $str, $re);
  $strs = split(' - ', $re[1]);
  print_r($strs);
?>

08-05 10:27