2010-09-24 76 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雖然的。