2010-09-24 81 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()对我来说。 – 2010-09-24 11:36:53

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

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

'split()'不赞成使用'preg_split()'。但无论如何,这仍然是一个有效的答案。 – BoltClock 2010-09-24 11:27:33

+0

感谢您的提示! – splash 2010-09-24 11:30:20

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虽然的。