如何preg_split所有字符,但不要拆分和

问题描述 投票:1回答:1

这里有很多关于[preg_split]的问题,但没有一个与我的问题有关。我正在使用以下代码将字符串拆分为PHP中的字符,如下所示:

$str = "My <b>table</b> in brown <br> Help";
$char = preg_split('//u', $str, -1, PREG_SPLIT_NO_EMPTY);
print_r($char);

输出是:

Array
(
    [0] => M
    [1] => y
    [2] =>  
    [3] => <
    [4] => b
    [5] => >
    [6] => t
    [7] => a
    [8] => b
    [9] => l
    [10] => e
    [11] => <
    [12] => /
    [13] => b
    [14] => >
    [15] =>  
    [16] => i
    [17] => n
    [18] =>  
    [19] => b
    [20] => r
    [21] => o
    [22] => w
    [23] => n
    [24] =>  
    [25] => <
    [26] => b
    [27] => r
    [28] => >
    [29] => ...
)

但我希望如下:

Array
(
    [0] => M
    [1] => y
    [2] =>  
    [3] => <b>
    [6] => t
    [7] => a
    [8] => b
    [9] => l
    [10] => e
    [11] => </b>
    [15] =>  
    [16] => i
    [17] => n
    [18] =>  
    [19] => b
    [20] => r
    [21] => o
    [22] => w
    [23] => n
    [24] =>  
    [25] => <br>
    [29] => ...
)

字符如:<b>,</b>,<br>,<i>,</i>等不应该拆分。

谢谢。

php regex pcre
1个回答
1
投票

您可以通过使用<选项分割单个字符或>PREG_SPLIT_DELIM_CAPTURE中的一系列字符来捕获每个值:

$str = "My <b>table</b> in brown <br> Help";
$char = preg_split('#(</?[a-z]+>|[a-z ])#ui', $str, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
print_r($char);

输出:

Array (
  [0] => M
  [1] => y
  [2] =>
  [3] => <b>
  [4] => t
  [5] => a
  [6] => b
  [7] => l
  [8] => e
  [9] => </b>
  [10] =>
  [11] => i
  [12] => n
  [13] => 
  [14] => b
  [15] => r
  [16] => o
  [17] => w
  [18] => n
  [19] =>
  [20] => <br>
  [21] =>
  [22] => H
  [23] => e
  [24] => l
  [25] => p 
)

Demo on 3v4l.org

© www.soinside.com 2019 - 2024. All rights reserved.