php preg_split从方括号将字符串拆分为数组

时间:2019-04-04 15:41:18

标签: php regex preg-split

我想从方括号中拆分字符串而不删除任何字符。我尝试了以下代码,但对我而言不起作用。

$value = "<p>&nbsp;Lorem ipsum dolor [State] sit amet, consectetur [City] adipisicing [TopJob7] elit, sed do eiusmod [JobType]</p>";

$tagsReplace = preg_split('/[\[]*[\][]/U', $value, -1);

echo '<pre>';
print_r( $tagsReplace );
exit;

当我运行上面的代码时,我得到了类似的输出

Array
(
    [0] => <p>&nbsp;Lorem ipsum dolor 
    [1] => State
    [2] =>  sit amet, consectetur 
    [3] => City
    [4] =>  adipisicing 
    [5] => TopJob7
    [6] =>  elit, sed do eiusmod 
    [7] => JobType
    [8] => </p>
)

我想要如下输出。

Array
(
    [0] => <p>&nbsp;Lorem ipsum dolor 
    [1] => [State]
    [2] =>  sit amet, consectetur 
    [3] => [City]
    [4] =>  adipisicing 
    [5] => [TopJob7]
    [6] =>  elit, sed do eiusmod 
    [7] => [JobType]
    [8] => </p>
)

请在错误的地方帮助我。

1 个答案:

答案 0 :(得分:3)

您的模式[{101, 2}, {202, 4}]与0+匹配一个左括号,然后一个左括号或右括号给您[\[]*[\][]或n [

要保留定界符,您可以捕获从][的组,并使用否定的字符类匹配而不是右括号匹配两者之间的内容。

使用]标志保留定界符。

请注意,您不需要PREG_SPLIT_DELIM_CAPTURE标志。

/U

说明

  • (\[[^]]+\]) 捕获组
    • (匹配\[
    • [匹配1次以上而不是[^]]+
    • ]匹配\]
  • ]关闭群组

Regex demo | Php demo

例如:

)