2010-09-24 3 views
3

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

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

$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-теги. Любые указатели?

ответ

4

Использование preg_split() с положительным опережающим просмотром для открытия тега:

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

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

+0

Это сделало трюк. И я был на PHP 5.3.0> так что нет split() для меня. –

1
$result = split('(?=<h2>)', $string); 

или

$result = preg_split('/(?=<h2>)/', $string); 
+1

'split()' устарел в пользу 'preg_split()'. Но это все равно правильный ответ. – BoltClock

+0

Спасибо за подсказку! – splash

0
$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, хотя.