Как preg_split весь символ, но не разбивать <b>и <br> - PullRequest
1 голос
/ 24 марта 2019

Здесь есть множество вопросов о [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> и т. Д., Не должны разделяться.

Спасибо.

1 Ответ

1 голос
/ 24 марта 2019

Это можно сделать, разделив один символ или последовательность символов в пределах < и >, используя параметр 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 
)

Демонстрация на 3v4l.org

...