PHP разбивает или разносит строку по тегу


Я хотел бы разделить строку в теге на разные части.

$string = 'Text <img src="hello.png" /> other text.';

Следующая функция еще не работает должным образом.

$array = preg_split('/<img .*>/i', $string);

Вывод должен быть

array(
    0 => 'Text ',
    1 => '<img src="hello.png" />',
    3 => ' other text.'
)

Какой шаблон я должен использовать, чтобы это сделать?

РЕДАКТИРОВАТЬ Что делать, если существует несколько тегов?

$string = 'Text <img src="hello.png" > hello <img src="bye.png" /> other text.';
$array = preg_split('/(<img .*>)/i', $string, -1, PREG_SPLIT_DELIM_CAPTURE);

И вывод должен быть:

array (
  0 => 'Text ',
  1 => '<img src="hello.png" />',
  3 => 'hello ',
  4 => '<img src="bye.png" />',
  5 => ' other text.'
)
Author: Andy Lester, 0000-00-00

2 answers

Вы на правильном пути. Вы должны установить флаг PREG_SPLIT_DELIM_CAPTURE следующим образом:

$array = preg_split('/(<img .*>)/i', $string, -1, PREG_SPLIT_DELIM_CAPTURE);

С несколькими тегами, правильно отредактированными регулярным выражением:

$string = 'Text <img src="hello.png" > hello <img src="bye.png" /> other text.';
$array = preg_split('/(<img[^>]+\>)/i', $string, -1, PREG_SPLIT_DELIM_CAPTURE);

Это выведет:

array(5) {
  [0]=>
  string(5) "Text "
  [1]=>
  string(22) "<img src="hello.png" >"
  [2]=>
  string(7) " hello "
  [3]=>
  string(21) "<img src="bye.png" />"
  [4]=>
  string(12) " other text."
}
 2
Author: Federkun, 2015-06-10 11:33:33

Вам нужно включить не жадный символ (?) как описано здесь также в вашем шаблоне, чтобы заставить его захватить первый встречающийся экземпляр. '/(<img .*?\/>)/i'

Таким образом, ваш пример кода будет выглядеть примерно так:

$string = 'Text <img src="hello.png" /> hello <img src="bye.png" /> other text.';
$array = preg_split('/(<img .*?\/>)/i', $string, -1, PREG_SPLIT_DELIM_CAPTURE);

var_dump($array);

Что приводит к печати:

array(5) {
    [0] =>
    string(5) "Text "
    [1] =>
    string(23) "<img src="hello.png" />"
    [2] =>
    string(7) " hello "
    [3] =>
    string(21) "<img src="bye.png" />"
    [4] =>
    string(12) " other text."
}
 1
Author: Ali, 2017-05-23 12:05:58