Взорвать строку в массив - PullRequest
3 голосов
/ 24 сентября 2010

Возможно, это легко сделать, но я не могу сгенерировать правильное регулярное выражение.

Скажем, у меня есть эта строка

$string = '<h2>Header 1</h2><p>ahs da sdka dshk asd haks</p><img src="http://dummyimage.com/100x100/" width="100" height="100" alt="Alt" /><h2>Header 2</h2><p>asdkhas daksdha kd ahs</p><em>Lame</em><p>trhkbasd akhsd ka dkhas</p><h2>Header 3</h2><p>ajdas ahkds hakd</p>';

И мне нужно вот так

$array[0] = '<h2>Header 1</h2><p>ahs da sdka dshk asd haks</p><img src="http://dummyimage.com/100x100/" width="100" height="100" alt="Alt" />';
$array[1] = '<h2>Header 2</h2><p>asdkhas daksdha kd ahs</p><em>Lame</em><p>trhkbasd akhsd ka dkhas</p>';
$array[2] = '<h2>Header 3</h2><p>ajdas ahkds hakd</p>';

... и так далее, если моя строка содержит больше этих блоков H2.

Итак, точка разделения находится на H2, и ей нужно сохранить HTML-теги.Есть указатели?

Ответы [ 3 ]

4 голосов
/ 24 сентября 2010

Используйте preg_split() с положительным прогнозом открытия тега:

print_r(preg_split('/(?=<h2>)/', $string, -1, PREG_SPLIT_NO_EMPTY));

Позитивный взгляд просто говорит синтаксическому анализатору регулярных выражений разбивать текст вокруг <h2>, но не удалять тег. Если вы разделите на /<h2>/, тег исчезнет, ​​так же, как если вы разделите с помощью explode().

1 голос
/ 24 сентября 2010
$result = split('(?=<h2>)', $string);

или

$result = preg_split('/(?=<h2>)/', $string);
0 голосов
/ 24 сентября 2010
$string = '<h2>Header 1</h2><p>ahs da sdka dshk asd haks</p><img src="http://dummyimage.com/100x100/" width="100" height="100" alt="Alt" /><h2>Header 2</h2><p>asdkhas daksdha kd ahs</p><em>Lame</em><p>trhkbasd akhsd ka dkhas</p><h2>Header 3</h2><p>ajdas ahkds hakd</p>';

$matches    = split('<h2>', $string);

print_r($matches);

Это устарело, начиная с PHP 5.3.0.

...