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.'
)
6
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