【问题标题】:php preg_split split string to array from square bracketsphp preg_split 将字符串从方括号拆分为数组
【发布时间】:2019-08-26 10:46:58
【问题描述】:

我想从方括号中拆分字符串而不删除任何字符。我尝试了下面的代码,但它不适合我。

$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>
)

请帮助我在哪里做错了。

【问题讨论】:

    标签: php regex preg-split


    【解决方案1】:

    您的模式 [\[]*[\][] 匹配 0+ 次左括号,然后是左括号或右括号,为您提供 [ 或 n ]

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

    使用PREG_SPLIT_DELIM_CAPTURE 标志来保留分隔符。

    请注意,您不需要 /U 标志。

    (\[[^]]+\])
    

    说明

    • (抓包组
      • \[匹配[
      • [^]]+ 匹配 1+ 次不是 ]
      • \]匹配]
    • )关闭群

    Regex demo | Php demo

    例如:

    $value = "<p>&nbsp;Lorem ipsum dolor [State] sit amet, consectetur [City] adipisicing [TopJob7] elit, sed do eiusmod [JobType]</p>";
    $tagsReplace = preg_split('/(\[[^]]+\])/', $value, -1, PREG_SPLIT_DELIM_CAPTURE);
    print_r( $tagsReplace );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-04
      • 1970-01-01
      • 2017-03-12
      • 1970-01-01
      • 1970-01-01
      • 2016-03-07
      相关资源
      最近更新 更多